Иногда бывает нужно сделать, отредактировать имеющийся. Задача простая и интересная.
Особенно с отличной документацией для Joomla.
Основное важное и полезное из перевода материала http://docs.joomla.org/How_to_create_a_content_plugin:
Описание
Content-плагины необходимы для подгрузки чего-либо в материалы (статьи) Joomla перед их отправкой клиенту.
Двумя необходимыми и достаточными для плагина файлами являются PHP и XML файлы с одинаковыми именами.
XML-файл
XML-файл следует начинать так:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE install PUBLIC "-//Joomla! 1.5//DTD plugin 1.0//EN" "http://dev.joomla.org/xml/1.5/plugin-install.dtd"> /* из опыта — необязательно */ <install version="1.5" type="plugin" group="content"> /* явно указываем content-группу плагина */ |
Добавляем информацию о создателе плагина:
<name>Название плагина</name> <creationDate>Дата создания</creationDate> <author>Имя автора</author> <authorEmail>E-mail автора</authorEmail> <authorUrl>Сайт автора</authorUrl> <copyright>Copyright</copyright> /* по желанию */ <license>License, for example GNU/GPL</license> /* по желанию */ <version>Версия плагина</version> <description>Описание плагина; показывается после установке и при редактировании настроек плагина в менеджере плагинов</description> |
Инклюдим PHP-файл плагина (и остальные при необходимости также).
<files> <filename plugin="nameofplugin">nameofplugin.php</filename> <filename plugin="nameofplugin">images/nameofimage.jpg</filename> </files> |
Можно прицепить и языковой файл, для того чтобы пользователи могли самостоятельно перевести плагин на свой язык.
<languages> <language tag="en-GB">en-GB.plg_content_nameofplugin.ini</language> </languages> <pre lang="xml"> Опционально вы можете добавить несколько параметров в плагин (или не добавлять, тогда добавьте тег <params/>), и не забудьте добавить </install> в конце файла: <pre lang="xml"> <params> <param name="paramname" type="typeofparameter" default="defaultsetting" label="title" description="description"/> </params> <pre lang="xml"> <h4>PHP-файл</h4> Начинать его рекомендуется с информации о лицензии и авторе. Далее необходимо поместить код проверки на прямой запрос файла и код импорта файла бибилиотеки плагинов Joomla: <pre lang="php"> // no direct access defined( '_JEXEC' ) or die( 'Restricted access' ); jimport( 'joomla.plugin.plugin' ); |
Для явного указания типа плагина используйте следующее название класса (важна подстрока plgContent):
class plgContentNameofplugin extends JPlugin { /* тоже касается и функций */ |
Конструируем плагин:
function plgContentNameofplugin( &$subject, $params ) { parent::__construct( $subject, $params ); } |
Далее следует выбрать момент включения кода плагина. Есть следующие варианты:
- onBeforeContentSave: перед сохранением материала а БД.
function onBeforeContentSave( &$article, $isNew ) { global $mainframe; //add your plugin codes here return true; }
- onAfterContentSave: после сохранения в БД.
function onAfterContentSave( &$article, $isNew ) { global $mainframe; //add your plugin codes here return true; }
- onPrepareContent : при подготовке контента к выводу, наиболее часто используемое событие.
function onPrepareContent( &$article, &$params, $limitstart ) { global $mainframe; //add your plugin codes here //no return value }
- onAfterDisplayTitle: при запросе информации между тайтлом и контентом.
function onAfterDisplayTitle( &$article, &$params, $limitstart ) { global $mainframe; //add your plugin codes here return ''; //return a string value. Returned value from this event will be displayed in a placeholder. // Most templates display this placeholder after the article separator. }
- onBeforeDisplayContent: при запросе информации выводимой до контента.
function onBeforeDisplayContent( &$article, &$params, $limitstart ) { global $mainframe; //add your plugin codes here return ''; //return a string value. Returned value from this event will be displayed in a placeholder. // Most templates display this placeholder after the article separator. }
- onAfterDisplayContent: при запросе информации выводимой до контента.
function onAfterDisplayContent( &$article, &$params, $limitstart ) { global $mainframe; //add your plugin codes here return ''; //return a string value. Returned value from this event will be displayed in a placeholder. // Most templates display this placeholder after the article separator. }
Более подробная информация о событиях тут: http://docs.joomla.org/Reference:Content_Events_for_Plugin_System.
Пример создания контент-плагинов смотрите в связанных статьях.
Отличная статья. Все сразу стало ясно. Главное начать, а мне начать нужно очень быстро.