В предыдущих статьях уже был рассмотрен процесс разработки модуля для Joomla, непосредственной вставке PHP-кода в материал, а сегодня хотелось бы показать пример реализации простого плагина, который будет заменять в материале вхождение строки {currentDate} текущей датой.
Итак, приступим. В простейшем случае плагин для Joomla должен состоять из двух файлов: xml и php. В первом будет содержаться информация о плагине, версия, копирайты и настройки. Во втором – сам код плагина. При желании можно подключать .css, .js .jpg и любые другие файлы, о чем нужно будет указать в xml-файле настроек.
Для начала рассмотрим xml файл:
<extension version="3.1" type="plugin" group="content" method="upgrade"> <!-- version - Версия Joomla, для которой пишем расширение; type - тип расширения - плагин; группа - content(для работы с материалами); method - upgrade - способ обновления расширения --> <name>plg_content_currentDate</name> <!-- Оставляем в названии принадлежность к группе plg_content_ + имя плагина --> <author>Stanislav Pichugin</author> <creationDate>June 2015</creationDate> <copyright> Copyright (C) 2015 Stanislav Pichugin </copyright> <license> </license> <authorEmail></authorEmail> <authorUrl>http://way-on-top.ru </authorUrl> <version>1.0</version> <!-- версия расширения --> <description>Плагин выводит текущую дату. Использование: {currentDate}</description> <files> <filename plugin="currentDate">currentDate.php</filename> </files> <config> <fields name="params"> <!-- здесь можно указать параметры --> <fieldset name="basic"> <field name="pretext" type="text" default="Сегодня у нас" label="Надпись перед датой" description="Что пишем перед датой" /> <!-- дадим пользователю выбрать фразу-приветствие в настройках плагина --> </fieldset> </fields> </config> </extension>
Теперь файл php:
<? class PlgContentCurrentDate extends JPlugin //создаем класс PlgContentCurrentDate на базе системного JPlugin { public function onContentPrepare($context, &$article, &$params, $page = 0) //переписываем метод onContentPrepare класа JPlugin, который вызовется перед показом материала { $pretext = $this->params->get('pretext'); //загружаем из параметров фразу-приветствие с аттрибутом name="pretext" if (!strpos($article->text, '{currentDate}')) //проверяем, есть ли в материале искомый {currentDate}. $article->text - материал. return false; else { $html = '<b>'. $pretext . ' ' . date("d.m.Y") . '</b>'; $article->text = str_replace('{currentDate}', $html, $article->text); //меняем {currentDate} на сгенерированный нами $html } } }
Когда все необходимые файлы созданы, помещаем их в корень одноименного zip-архива, который впоследствии и будем устанавливать через админку.
Не забываем включить плагин в менеджере расширений!
Выше был рассмотрен наиболее простой вариант, на практике, как правило, все вхождения плагина цепляются регулярными выражениями, через которые также могут передаваться некие параметры, и далее обрабатываются через callback-функциии метода preg_replace_callback( mixed $pattern , mixed $replacement , mixed $subject )