Делаем плагины для Fapos CMS

Хоть в документации и освещена эта тема, тут я постараюсь раскрыть ее более подробно и с примерами. Так сказать - разжевать. Надеюсь это повлечет волну плагинов для, всеми нами любимого, движка).

И так, как делать плагины для Fapos CMS?

Есть несколько пунктов, которые просто обязательны. Это как бы система, которая призвана внести некий порядок. Хотя сама архитектура плагина может быть несоизмеримо объемной и ограничена, в конечном счете, только вашей фантазией.

1. Все плагины должны находиться в папке /sys/plugins/. Иначе система их просто не увидит.
2. Плагин Fapos CMS, должен содержать, как минимум, два файла: index.php и config.dat.
3. Должны быть соблюдены соглашения имен методов, классов и настроек. Только обязательных. Их всего несколько штук. Далее начинается полет фантазии.


И так начинаем.

Первым делом, нам надо определиться, под какой хук мы будем писать плагин(список и детальное описание хуков скоро будет в документации и я напишу отдельный пост на эту тему). Для примера, возьмем хук before_view. Этот хук(hook) позволяет манипулировать полностью сформированной страницей, прямо перед ее выводом.

Теперь придумываем название нашего будущего плагина. Я не смог придумать ничего оригинальнее fufuplugin(уж простите).

Все эти данные говорят нам о том, что каталог для нашего плагина будет называться before_view_fufuplugin. Создаем этот каталог и в нем два файла. index.php и config.dat. PHP файл - это файл с логикой плагина. Там будет наш php код. config.dat - это конфигурационный файл. С ним частенько возникают вопросы, по этому я остановлюсь на нем подробно.

Конфиг должен содержать, как минимум, следующие параметры: className - это название класса, который будет находится в файле index.php. Позже вы увидите это. title - название(любое) description - описание(любое) active - ставим 1. Это будет означать, что плагин работает.

Все эти настройки должны храниться в виде сериализованного массива. Я покажу простой скрипт для создания такого конфига.
1
2
3
4
5
6
7
<?php  = array(
                'className' => 'Fufuplugin',
                'title' => 'fufu',
                'description' => 'simple plugin',
                'active' => 1,    
        );
        file_put_contents('config.dat', serialize());?>

После запуска скрипта, в каталоге с ним появится наш конфиг.

Хочу, так же, добавить, что конфиг может содержать любые дополнительные настройки, в том числе, и те, которые потом мы сможем изменять через админку. Ну или как угодно.

А теперь я покажу, как должен будет выглядеть самый простой класс для этого плагина. Файл index.php
1
2
3
4
5
6
<?php class Fufuplugin {
 
                public function common() {
                
                }
        }?>

Метод common обязательный. Управление с хука передается именно ему, а дальше вы вольны делать, что угодно. Параметр $params - это данные с хука. В данном случае, это вся страница. Обратите внимание, я назвал класс именно так, как прописал в конфиге - это важно. Иначе плагин не будет работать.

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

Ну а теперь, самое интересное - как управлять всем этим из админки. Сейчас я расскажу, как собрать плагин, который добавит в админку новые страницы для настроек. Для этого нам понадобится создать в каталоге нашего плагина еще один файл - settings.php. Что бы все работало, как надо, есть лишь одно условие - этот файл должен определять переменную $output.
Например(settings.php):
1
<?php  = 'Plugin settings';?>

Если вашь файл settings.php будет содержать такую строку, перейдя на страницу настройки своего плагина, вы увидите текст Plugin settings.

Но есть вещи по интереснее. Например мы желаем, что бы у нас была не одна страница а несколько и мы могли перемещаться между ними для детальной настройки нашего плагина Fapos CMS. На этот случай, нам надо предусмотреть логику нашего кода в файле settings.php и знать как формировать ссылки на наши страницы. Дело в том, что для перехода к настройкам плагина мы должны перейти по адресу host.com/admin/plugins.php?ac=edit&dir=каталог плагина. То есть в нашем случае, это будет host.com/admin/plugins.php?ac=edit&dir=before_view_fufuplugin. Теперь о логике самого файла 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 и на основе этого параметра создаем логику.

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

Желаю вам легкого осознания всего вышеизложенного и жду ваши плагины в разделе форума "готовое". Плагины с хорошими отзывами будут переноситься в фаловый архив Fapos CMS.