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

Логотип Joomla DocsИногда бывает нужно сделать, отредактировать имеющийся. Задача простая и интересная.

Особенно с отличной документацией для 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.
Пример создания контент-плагинов смотрите в связанных статьях.

1 Комментарий

  • 09.01.2015 delphmaster:

    Отличная статья. Все сразу стало ясно. Главное начать, а мне начать нужно очень быстро.


Добавление комментария:

 css.php