В предыдущих статьях уже был рассмотрен процесс разработки модуля для 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 )