Главная » Статьи » Документация » Для разработчиков
Категории

Плагины

В 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.

Как видите, мы должны передать два обязательных параметра, но никто не запрещает добавлять свои. Например мы можем сделать, что-то типа:
 1 
 2 
 3 
 4 
<?php if (!empty($_GET['page']) && $_GET['page'] == 2)
         = 
'<a href="/admin/plugins.php?ac=edit&dir=before_view_fufuplugin&page=1">To page 1</a>';
else 
         = 
'<a href="/admin/plugins.php?ac=edit&dir=before_view_fufuplugin&page=2">To page 2</a>';?>


Думаю тут все понятно. Мы просто передаем дополнительный параметр page и на основе этого параметра создаем логику.


Итоги

Вот и все, что надо для простейшего плагина. Но помните, в каталоге с плагином у вас может находиться любое количество других папок и файлов. По сути, вы можете создавать плагины с функционалом целого модуля.
Для разработчиков Просмотров: 1422 Комментариев: 0