Интеграция плагинов с админ-панелью LS
Одна из главных фишек новой админки, это удобная и проста интеграция с другими плагинами.
Теперь плагины могут встраивать свой интерфейс прямо внутрь админки.
Рассмотрим основные технические моменты. Есть два варианта интеграции:
Описание всех параметров задается в конфиге плагина в специальном ключе $config_scheme$, например
Здесь в качестве ключей массива идут названия параметров конфига, далее описывается тип параметра, его название, описание и опции валидации. В качестве валидаторов можно использовать доступные валидаторы самого движка (модуль Validate). Также есть поддержка простых массивов (одномерное перечисление данных). Более подробно и типах параметров и их описании можно посмотреть здесь github.com/livestreet/lsplugin-admin/blob/master/config/config_scheme_sandbox.php
Далее необходимо описать разделы, делается это также в конфиге в параметре с ключом $config_sections$, например
Здесь происходит перечисление разделов, для каждого раздела необходимо указать список ключей конфига, которые будут редактироваться. Обязательно должен быть объявлен хотя бы один раздел.
С описанием схемы закончили. Теперь если перейти на страницу списка активных плагинов и нажать кнопку «Конфигураци» у нужного плагина, то мы попадем на интерфейс редактирования конфига.
Необходимо создать экшен с именем ActionAdmin, например, PluginMy_ActionAdmin и обязательно наследовать его от специального класса PluginAdmin_ActionPlugin. Всё. Теперь можно смело писать свой функционал экшена, никаких отличий с обычными экшенами плагинов нет. Шаблоны экшена следует расположить в /actions/ActionAdmin/, причем можно это сделать как в текущем (во всех) скине плагина, так и в default или в admin_default, тогда темлейты для админки можно будет создать один раз и они не будут зависеть от текущего шаблона сайта.
Осталось только добавить свой пункт в меню админки. Для добавления пункта есть два варианта:
Новый пункт будет вести на страницу /admin/plugin/my/.
Пример добавления раздела в главное мню со своими пунктами:
Пример плагина «Статьи» с интеграцией идет в комплекте с админкой — github.com/livestreet/lsplugin-admin/tree/master/example/plugins/article
Теперь плагины могут встраивать свой интерфейс прямо внутрь админки.
Рассмотрим основные технические моменты. Есть два варианта интеграции:
- Визуальное управление конфигом плагина
- Встраивание функционала в интерфейс админки (для более сложных плагинов)
Визуальное управление конфигом плагина
Все что нужно сделать, это описать так называемую схему конфига. Она состоит из двух частей — описание всех параметров конфига и описание групп/разделов параметров, которые формируют визуальную группировку на странице редактирование параметров.Описание всех параметров задается в конфиге плагина в специальном ключе $config_scheme$, например
$config['$config_scheme$'] = array( 'per_page' => array( /* * тип: integer, string, array, boolean, float */ 'type' => 'integer', /* * отображаемое имя параметра, ключ языкового файла относительно плагина, или просто текст */ 'name' => 'Количество элементов на страницу', /* * отображаемое описание параметра, ключ языкового файла относительно плагина, или просто текст */ 'description' => 'config.per_page.description', /* * валидатор (не обязательно) */ 'validator' => array( /* * тип валидатора, существующие типы валидаторов движка: * Boolean, Compare, Date, Email, Number, Regexp, Required, String, Tags, Type, Url, + Array (специальный валидатор, см. документацию) */ 'type' => 'Number', /* * параметры, которые будут переданы в валидатор */ 'params' => array( 'min' => 1, 'max' => 20, /* * разрешить только целое число */ 'integerOnly' => true, /* * не допускать пустое значение */ 'allowEmpty' => false, ), ), ), 'param_string_1' => array( 'type' => 'string', 'name' => 'config.param_string_1.name', 'description' => 'config.param_string_1.description', 'validator' => array( 'type' => 'String', 'params' => array( 'min' => 5, 'max' => 50, 'allowEmpty' => true, ), ), ), );
Здесь в качестве ключей массива идут названия параметров конфига, далее описывается тип параметра, его название, описание и опции валидации. В качестве валидаторов можно использовать доступные валидаторы самого движка (модуль Validate). Также есть поддержка простых массивов (одномерное перечисление данных). Более подробно и типах параметров и их описании можно посмотреть здесь github.com/livestreet/lsplugin-admin/blob/master/config/config_scheme_sandbox.php
Далее необходимо описать разделы, делается это также в конфиге в параметре с ключом $config_sections$, например
$config['$config_sections$'] = array( /** * Настройки раздела */ array( /** * Название раздела */ 'name' => 'config_sections.one', /** * Список параметров для отображения в разделе */ 'allowed_keys' => array( 'per_page', 'other.*' ), /** * Список параметров для исключения из раздела */ 'excluded_keys' => array( 'other.two', ), ), array( 'name' => 'config_sections.two', 'allowed_keys' => array( 'param_string_*', ), ), );
Здесь происходит перечисление разделов, для каждого раздела необходимо указать список ключей конфига, которые будут редактироваться. Обязательно должен быть объявлен хотя бы один раздел.
С описанием схемы закончили. Теперь если перейти на страницу списка активных плагинов и нажать кнопку «Конфигураци» у нужного плагина, то мы попадем на интерфейс редактирования конфига.
Встраивание функционала в интерфейс админки
Такая возможность необходима тем плагинам, которым нужна более сложная настройка и управление данными, чем просто редактирование конфига. Например, создание статей.Необходимо создать экшен с именем ActionAdmin, например, PluginMy_ActionAdmin и обязательно наследовать его от специального класса PluginAdmin_ActionPlugin. Всё. Теперь можно смело писать свой функционал экшена, никаких отличий с обычными экшенами плагинов нет. Шаблоны экшена следует расположить в /actions/ActionAdmin/, причем можно это сделать как в текущем (во всех) скине плагина, так и в default или в admin_default, тогда темлейты для админки можно будет создать один раз и они не будут зависеть от текущего шаблона сайта.
Осталось только добавить свой пункт в меню админки. Для добавления пункта есть два варианта:
- Если у плагина только одна страница — добавлять лучше не в главное меню, а в подменю «Дополнительно»
- Если у плагина несколько страниц (создание статьи, список статей и т.п.), то лучше добавить раздел в главное меню со своими пунктами.
$this->PluginAdmin_Ui_AddItemMenuAddition(Engine::GetEntity('PluginAdmin_Ui_MenuItem')->SetCaption('Список статей')->SetUrl('my'));
Новый пункт будет вести на страницу /admin/plugin/my/.
Пример добавления раздела в главное мню со своими пунктами:
/** * Получаем объект главного меню */ $oMenu = $this->PluginAdmin_Ui_GetMenuMain(); /** * Добавляем новый раздел с пунктами */ $oMenu->AddSection( Engine::GetEntity('PluginAdmin_Ui_MenuSection')->SetCaption('Мой плагин')->SetName('my')->SetUrl('plugin/my') ->AddItem(Engine::GetEntity('PluginAdmin_Ui_MenuItem')->SetCaption('Список статей')->SetUrl('')) ->AddItem(Engine::GetEntity('PluginAdmin_Ui_MenuItem')->SetCaption('Создать')->SetUrl('create')) );
Пример плагина «Статьи» с интеграцией идет в комплекте с админкой — github.com/livestreet/lsplugin-admin/tree/master/example/plugins/article
35 комментариев
пример плагина в самом конце топика
/application/plugins/admin/classes/modules/plugins/Plugins.class.php
В строке 398 использование функции func_camelize:
было:
стало:
Причина в том, что если создать для плагина папку import_topic то плагин админки проверяет наличие файла PluginImport_topic.class.php, а при активации плагина ищется файл PluginImportTopic.class.php.
Добавление функции func_camelize все решает.
Заранее спасибо.
разобрался.
Подключил дефолтные сообщения в функции Init вот так:
Это правильно с точки зрения разработки плагина?
но скрипты подключать, да, через Viewer_AppendScript
только если добавляется какой-то общедоступный скрипт, то его лучше именовать (параметр name), чтобы избежать дублей от других плагинов
ну а messages.ru.js мы подключим по дефолту в админке
Создавая плагин дошел до модуля и был удивлен, что в примере article нет привычного маппера для работы с базой данной и добавления статьи в базу.
Когда можно будет ждать документации по ORM, желательно в формате ScreenCast? :)
если другой плагин добавит этот же скрипт и укажет такое же имя (parsley) — дублей загружаемых скриптов не будет.
/framework/classes/modules/viewer/Viewer.class.php
Строка 819:
Таким образом человеческий фактор просто будет исключен.
Может что-то типа такого?
если это jquery плагин, то нужно по его названию, например, 'jquery.niceslider'
скрипты могут отличаться версией, комментариями, минификацией кода и т.п.
www.youtube.com/watch?v=8_5_qLY0Uk0
это создание настроек плагина. тип array
любое текстовое значение, в котором встречается кавычка.
В экшене пришлось подключить стили и скрипты:
Дополните пожалуйста файлы в /application/plugins/admin/classes/actions/ActionAdmin.class.php, чтобы было доступно сразу для всех плагинов админки, либо перенесите подключение необходимых файлов непосредственно в шаблон, так будет наверно более правильно.