Плагин «Хранилище настроек (Config Engine)»


Плагин представляет возможности для автоматического сохранения конфига плагина в БД. Больше нет необходимости редактировать конфиги плагинов вручную по фтп — вам нужно только сделать интерфейс для их редактирования, хранение настроек возьмет на себя этот плагин.

Часто при разработках плагинов есть необходимость сохранить в базе некоторое количество простой информации и приходится каждый раз писать стандартную обвязку в виде модуля, сущности и маппера (и про кэш ещё не забыть) — это отвлекает от бизнес логики и требует времени на написание кода для хранения этой несложной информации.

Этот плагин как раз и решает такую задачу — сохранение конфигов ваших плагинов в БД, их автоматической загрузки при старте ядра (или ручной загрузки — в зависимости от настроек вашего плагина). Плагин предоставляет простой АПИ для плагинов в виде функций «Сохранить/Получить», оптимизирован и использует кэш при работе с БД. Редактирование самих настроек (конфига) вашего плагина ложится на ваши плечи.

Также плагин предоставляет хранение и получение данных из БД для вашего плагина по ключу. Отличие от функций хранения конфига в том, что эти данные хранятся отдельно и не попадают в конфиг вашего плагина и их получение из БД выполняется только по запросу вашего плагина.

Программный интерфейс (API)
Интерфейс плагина представляет 2 функции для управления конфигом вашего плагина и 5 функций для сохранения, получения и удаления произвольных данных по текстовому ключу.

  1. SaveMyConfig ($oPluginSomeClass, $iAutoLoad = 1)
    Описание:
    Сохранение конфига вашего плагина в БД.

    Пример:
    CE::SaveMyConfig ($this, false);

    Параметры:
    oPluginSomeClass всегда $this
    iAutoLoad = 1, то при старте ядра плагин автоматически получает свои настройки и может использовать обычные Config::Get (), если же iAutoLoad = 0, то при старте настройки плагина не затрагиваются, конфиг соответствует оригинальному. В таком случае чтобы получить настройки нужно вызвать следующую функцию:

  2. GetMyConfig ($oPluginSomeClass)
    Описание:
    Ручное получение конфига плагина из БД.

    Пример:
    CE::GetMyConfig ($this);

    Параметры:
    oPluginSomeClass всегда $this

  3. SaveMyData ($oPluginSomeClass, $sKey, $aMixedData)
    Описание:
    Ручное сохранение данных в БД по текстовому ключу для вашего плагина, которые не заносятся в ваш конфиг.

    Пример:
    CE::SaveMyData ($this, 'my_settings', array (1, 5, 12, 'name' => 'dev'));

    Параметры:
    oPluginSomeClass всегда $this
    sKey строковое значение ключа
    aMixedData данные, которые необходимо сохранить в БД. Данные могут быть любого типа, кроме типа resource.

  4. GetMyData ($oPluginSomeClass, $sKey)
    Описание:
    Ручное получение данных из БД по текстовому ключу для вашего плагина, которые не заносятся в ваш конфиг. Возвращает данные, если данные ещё небыли занесены — вернет false.

    Пример:
    $aMixed = CE::GetMyData ($this, 'my_settings');

    Параметры:
    oPluginSomeClass всегда $this
    sKey строковое значение ключа

  5. DeleteMyData ($oPluginSomeClass, $sKey)
    Описание:
    Ручное удаление данных из БД по текстовому ключу для вашего плагина.

    Пример:
    CE::DeleteMyData ($this, 'my_settings');

    Параметры:
    oPluginSomeClass всегда $this
    sKey строковое значение ключа

  6. GetMyDataByLike ($oPluginSomeClass, $sKey)
    Описание:
    Ручное получение данных из БД по началу текстового ключа для вашего плагина, которые не заносятся в ваш конфиг. Возвращает массив полученных данных, в котором каждый элемент также является массивом, где имя ключа хранится в pluginname, а данные в data.
    Например, нужно получить все значения ключи которых начинаются на my_array_, т.е. my_array_1, my_array_2 и т.п. Нижеприведенный пример справится с этой задачей.

    Пример:
    $aMixed = CE::GetMyDataByLike ($this, 'my_array_');

    Параметры:
    oPluginSomeClass всегда $this
    sKey строковое значение начала ключа

  7. DeleteMyDataByLike ($oPluginSomeClass, $sKey)
    Описание:
    Ручное удаление данных из БД по началу текстового ключа для вашего плагина. Удаляет все записи, ключи которых начинаются по указанному. Например, нужно удалить все значения ключи которых начинаются на my_array_, т.е. my_array_1, my_array_2 и т.п. Нижеприведенный пример справится с этой задачей.

    Пример:
    CE::DeleteMyDataByLike ($this, 'my_array_');

    Параметры:
    oPluginSomeClass всегда $this
    sKey строковое значение начала ключа

Замечания / оптимизация
При сохранении в БД вашего конфига (использование функций № 1 и 2) важно помнить, что если какие-то ключи не нужны — их желательно сбрасывать стандартными средствами чтобы меньше хранить данных в БД:

Config::Set ('plugin.ИМЯ_ВАШЕГО_ПЛАГИНА.КЛЮЧ_ДЛЯ_УДАЛЕНИЯ', null);

Внесение необходимых значений в файл xml вашего плагина
Если ваш плагин использует ConfigEngine, то укажите в xml файле вашего плагина эту зависимость в соответствующих секциях (внимание на 4 строку):

  <requires>
    <livestreet>0.5</livestreet>
    <plugins>
      <plugin>configengine</plugin>
    </plugins>
  </requires>

чтобы сначала активированным был плагин ConfigEngine — это позволит избежать ошибок.

Скриншот простой админки

Так выглядит список плагинов, которые имеют конфиги либо хранят данные через этот плагин:



Лицензия
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
Также можно связаться со мной для разрешения вопросов.

При создании продуктов которые используют API плагина ConfigEngine, к документации (описанию) плагина должна быть добавлена текстовая информация:

Плагин использует хранилище ConfigEngine (http://livestreetcms.com/addons/view/380/) от PSNet (http://psnet.lookformp3.net/).

В случае если используется ввод текста для описания с возможностью вставки html кода, тогда следует делать ссылки:

Плагин использует хранилище ConfigEngine от PSNet.


Плагин доступен в каталоге.

9 комментариев

avatar
Спасибо вам большое за этот плагин!
И как же приятно увидеть, что он является бесплатным ,)
avatar
Респект. Вещь полезная, для новичков неотемлемая.
avatar
dwdawddw
dawdawd
avatar
уже наверно месяц прошел как я сделал это
avatar
и Вам респект, пропустил публикацию…
avatar
Велосипедов много разных мы пишем часто! Можно вспомнить сколько у нас плагинов галерей, аудио записей и афиш.

У вашего и моего плагинов разные возможности. Этот плагин я давно уже хотел дописать. Про ваш я даже не вспомнил что такой есть (но я его видел, но что-то не задумался).

Различий много, например, в том, что данный плагин может хранить любые данные (напр., многомерные массивы) и делает это весьма просто (без сложных объявлений) и через АПИ, не предоставляя сам интерфейс для редактирования настроек — это возлагается на плечи автора плагина.
Но в первую очередь — он работает с конфигами плагинов в целом (интегрируясь), т.е. любой плагин который сегодня работает через конфиг можно легко перенести на работу с этим плагином просто добавив туда модуль редактирования своих настроек. Но нигде в других местах плагинов не нужно будет ничего менять. Весь код останется таким же.

Также обозначу про подачу материала: я написал полную справку по списку функций, а вы почему-то поленились это сделать (имя методов у вас есть, но списка параметров — нету и т.п.).

Раз вы говорите что прошел месяц после вашей публикации, то почему вы не сделали ни одного плагина на основе вашего АПИ? Создать оно, конечно, хорошо но нужно и показать что можно сделать на основе этого. Я сейчас дописываю ещё один плагин который использует АПИ этого плагина (CE).

З.Ы. Мой плагин под другой лицензией.
З.З.Ы. Я так и не понял: вы спрашиваете зачем я это писал или вы расстроились?
З.З.З.Ы. Почему вашего плагина нет в каталоге? Это весьма важно — в каталоге плагины проходят проверку и это дает какой-то вес доверия к нему т.к. ваш плагин (судя по АПИ) очень сильно привяжет плагины к себе.
avatar
Это был не вопрос и ни в коем случае не упрек — это незаконченное повествование.
А про различия, вы зря — их не так много.
Дело не в измерениях кое-чего, а в том, что проще было бы скрестить работы.
По поводу каталога — так вышло, что модерация затянулась из-за пропущенной галочки.
avatar
А про различия, вы зря — их не так много.
но они значительные: ваш плагин делает упор на интерфейс, но АПИ сложноватое (нужно описать структуру), а этот — на методы, причем более простые в использовании.
та и почему зря? я просто описал их.
avatar
Плагин обновлен до версии 1.1.1 для ЛС 1.0 (косметический ремонт)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.