В AtomX есть система плагинов, которая позволяет расширять стандартный функционал системы. В этой статье я расскажу как использовать эту возможность.
Обязательные условия
Каждый плагин должен находиться в папке /sys/plugins/
Каждый плагин должен представлять из себя дирректорию, чье имя состоит из бук, цифр или знака подчеркивания "_". Буквенные символы могут быть в любом регистре.
Плагин должен содержать конфиг в формате JSON config.dat.
В конфиге должны быть следующие значения: className - Имя основного класса(ниже будет рассказанно что это) title - Название плагина active - Включен ли плагин(1|0) points - На какие хуки подписывается плагин(массив)
Плагин должен содержать файл index.php, в котором будет находится основной класс.
Плагин подписывается на хуки, перечисленные в points. Когда система "доходит" до одного из хуков, на которые подписан плагин, создается объект основного класса(того, который в index.php) и вызывается метод common этого объекта. В качестве параметров в метод передаются параметры хука(индивидуальны для каждого хука) и название хука. Например, самый простой класс, мог бы выглядеть примерно так:
1 2 3 4 5
<?php class ChangeCategoryTemplate {
public function common($params, $hookName) {
return $params;
}
}?>
Как ты мог заметить, в данном примере, мы возвращаем тоже, что и получили ($params). Это означает, что мы ничего не изменили. Другими словами - наш плагин ничего не сделал. Именно таким образом, в основном, и осуществляется модификация чего либо через плагин - получаем на вход одно, а возвращаем другое. Например: получили готовую отрендеренную страницу, что-то в ней заменили(например ссылки) и вернули. Все довольно просто.
В примере выше, класс имеет название ChangeCategoryTemplate. Это название должно совпадать с тем, что мы указали в конфиге(className).
Интеграция в админку
Любой плагин можно довольно просто интегрировать в админ панель. Например для его настройки. Любой плагин можно включить и выключить через админку, для этого даже не надо ничего делать. Но вот, если мы хотим чего-то большего, прийдется кое-что добавить в наш плагин. Это кое-что - файл settings.php. Задача этого файла принимать некоторые параметры и возвращать контент страницы, которая будет отображена как одна из страниц админки.
В этом кейсе есть только одно условие, обязательное для выполнения - в глобальной области видимости файла settings.php должна определяться переменная $output. Содержимое этой переменной и будет использоваться как страница. Важно понимать, что данные из $output используются не как совершенно отдельная страница, а подставляются в лаяут админ панели. То есть такие элементы как верхнее меню, боковое меню и т.д. будут на странице в любом случае и тебе об этом беспокоиться не стоит.
Пример:
1 2
<?php $output = 'Plugin settings';?>
Перейдя на такую страницу настроек, мы увидим пустую страницу админки с надписью Plugin settings.
Но есть вещи по интереснее. Например мы желаем, что бы у нас была не одна страница а несколько и мы могли перемещаться между ними для детальной настройки нашего плагина. На этот случай, нам надо предусмотреть логику нашего кода в файле settings.php и знать как формировать ссылки на наши страницы. Дело в том, что для перехода к настройкам плагина мы должны перейти по адресу host.com/admin/plugins.php?ac=edit&dir=каталог плагина. То есть в нашем случае, это будет(например) host.com/admin/plugins.php?ac=edit&dir=myplugin. Теперь о логике самого файла settings.php.
Как видите, мы должны передать два обязательных параметра, но никто не запрещает добавлять свои. Например мы можем сделать, что-то типа:
Думаю тут все понятно. Мы просто передаем дополнительный параметр page и на основе этого параметра создаем логику.
Итоги
Вот и все, что надо для простейшего плагина. Но помните, в каталоге с плагином у вас может находиться любое количество других папок и файлов. По сути, вы можете создавать плагины с функционалом целого модуля.