В предыдущих статьях уже был рассмотрен процесс разработки модуля для Joomla, непосредственной вставке PHP-кода в материал, а сегодня хотелось бы показать пример реализации простого плагина, который будет заменять в материале вхождение строки {currentDate} текущей датой.

Создание плагина для Joomla 3

Итак, приступим. В простейшем случае плагин для 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 )

Скачать плагин.