Янв
Joomla создание плагина
Недавно под задачу написал плагин для joomla и после этого решил сделать заметку о том как для joomla создать плагин.
Как работает джумла плагин
Для начала немного теории. Так что же такое плагин в контексте джумлы. А это скрипт, который исполняется в определённых местах основного цикла joomla. Места выполнения скрипта ещё называют событиями. Работу плагина можно разбить на несколько шагов:
- Все плагины, которые включены в админ панели включаются в цикл джумла.
- Происходит вызов определённого события. Например в стандартном шаблоне для статьи компонента com_content
встречается код
echo $this->item->event->beforeDisplayContent
. Это и есть вызов события. - Джумла выбирает из включенных плагинов те которые относятся к вызову события (плагины подразделяются на системные, контент, пользовательские и тд) и
выполняет код метода вызываемого события (у нас это
beforeDisplayContent
).
Пока не совсем всё ясно но к концу статьи должно проясниться. Ниже в таблице показаны какие события могут обрабатывать плагины joomla.
События плагинов joomla
Тип плагина | Название события | Описание |
---|---|---|
Аутентификация (Authentication) | onUserAuthenticate |
Это событие срабатывает когда кто то авторизуется в админке или на сайте |
Капча(Captcha) |
onInit onDisplay onCheckAnswer |
События капчи |
Контент (Content) | onContentAfterDelete onContentAfterDisplay onContentAfterSave onContentAfterTitle onContentBeforeDelete onContentBeforeDisplay onContentBeforeSave onContentBeforeTitle onContentChangeState onContentPrepare onContentPrepareData onContentPrepareForm |
События контента (добавление, отображение, подготовка и тд ) |
Контакты (Contacts) |
onSubmitContact onValidateContact |
События обработки контактов (отправка контактов и валидация) |
Редакторы (Editors) |
onInit onSave onSetContent onGetContent onGetInsertMethod onDisplay |
События редакторов joomla |
Editors-XTD |
onDisplay onCustomEditorButton |
События специальных кнопок для редакторов (разрыв страницы и тд) |
Расширение(Extension) |
onExtensionBeforeInstall onExtensionBeforeUpdate onExtensionBeforeUninstall onExtensionAfterInstall onExtensionAfterUpdate onExtensionAfterUninstall |
События расширений (установка модулей, компонентов и тд, удаление, обновление) |
Система (System) |
onAfterInitialise onAfterRoute onAfterDispatch onAfterRender onBeforeCompileHead onBeforeRender |
Системные плагины выводятся после каждого цикла joomla |
Пользователь (User) |
onUserAfterDelete onUserBeforeDelete onUserBeforeSave onUserAfterSavev onUserLogin onUserLogout onLoginFailure onLogoutFailure onUserAuthenticate onUserAuthorisation |
Эти события срабатывают при авторизации пользователя или редактировании его данных |
Почти все плагины joomla являются классами. Они наследуются от класса JPlugin
. Есть определённое соглашение о именовании плагина. Класс
плагина должен именоваться по такому типу: plg
Тип нашего плагина
Название нашего плагина
Тоесть если мы захотим создать контент плагин с названием hello название класса будет plgContentHello
. Теперь мы обладаем всеми данными для написания плагина.
Манифест плагина
Я решил написать простой контент плагин, который выводит заданное в админ панели приветствие ( например "Здравствуйте уважаемые читатели блога") перед статьёй во всех статьях блога. Пользы от него конечно мало
но для примера написания плагина я думаю пойдёт. И так приступим. Плагин назовём Greet
. Для начала создадим папку greet
, а в ней файлы: index.html
- это заглушка,
greet.xml
- это файл манифест (для установки плагина), greet.php
- файл с кодом самого плагина. В текстовом редакторе откроем greet.xml
.
Ниже увидите листинг самого greet.xml
<?xml version="1.0" encoding="utf-8"?> <extension version="3.5.0" type="plugin" group="content" method="upgrade"> <name>PLG_CONTENT_GREET</name> <author>Aleksey Grigoriev</author> <creationDate>January 2017</creationDate> <copyright>Copyright (C) 2017> <license>GNU General Public License</license> <authorUrl>www.aweb34.ru</authorUrl> <version>3.0.0</version> <description>PLG_CONTENT_GREET_DESCRIPTION</description> <files> <filename plugin="greet">greet.php</filename> <filename>index.html</filename> <folder>language</folder> </files> <config> <fields name="params"> <fieldset name="basic"> <field name="greet" type="text" description="PLG_CONTENT_GREET_DESC" label="PLG_CONTENT_GREET_LABEL" filter="string" default="" size="30" /> </fieldset> </fields> </config> </extension>
Давайте разберёмся что здесь и к чему.
Тип расширения plugin
, относится к группе content
<extension version="3.5.0" type="plugin" group="content" method="upgrade">
В папке находятся файл плагина и заглушка index.php, а так же папка с языковыми файлами, но об этом позже
<files> <filename plugin="greet">greet.php</filename> <filename>index.html</filename> <folder>language</folder> </files>
В админ панели в настройках плагина будет тестовое поле с именем greet по умолчанию пустое с длинной в 30 символов. В это поле мы будем вводить наше приветствие. Элемент fields с атрибутом name="params" специально создан что бы мы могли получить параметры плагина.
<config> <fields name="params"> <fieldset name="basic"> <field name="greet" type="text" description="PLG_CONTENT_GREET_DESC" label="PLG_CONTENT_GREET_LABEL" filter="string" default="" size="30" /> </fieldset> </fields> </config>
Остальные поля я думаю интуитивно понятны.
Русификация плагина Joomla
Согласно манифесту у нас должна быть в папке greet папка с языковыми файлами. Так давайте создадим папку language
в папке greet
. Так же в папке language
создадим папку ru-RU
, а в ней файлы ru-RU.plg_content_greet.ini
и ru-RU.plg_content_greet.sys.ini
. Обратите внимание, что в наименовании языковых файлов есть
определённые правила.
Так как плагин тестовый, английской локализации я не предусмотрел.
файл ru-RU.plg_content_greet.ini
является основным языковым файлом. В нём находятся языковые константы, которые отвечают за отображение названий полей и тд, находящихся
внутри плагина, и за название плагина в менеджере плагинов. Листинг файла:
PLG_CONTENT_GREET_DESC="Введите в поле текст приветствия" PLG_CONTENT_GREET_LABEL="Текст приветствия"
Файл ru-RU.plg_content_greet.sys.ini отвечает за отображение языковых констант во время установки плагина. Листинг:
PLG_CONTENT_GREET="Плагин приветствия" PLG_CONTENT_GREET_DESCRIPTION="Плагин выводит приветствие после заголовка статьи"
Разработка плагина joomla
Как я писал выше, основной код плагина у нас находится в файле greet.php
. Давайте откроем его в текстовом редакторе и вставим код из листинга ниже.
<?php //запрещает доступ не из joomla defined('_JEXEC') or die; //создаём класс плагина class plgContentGreet extends JPlugin { //задаём тип события public function onContentBeforeDisplay( $context, &$row, &$params, $page = 0 ) { //получаем значение поля приветствия $param = $this->params->get('greet', 'defaultValue'); //выводим приветствие return $param; } }
Тут я думаю всё просто. Назвали класс нашего плагина согласно договорённость plgContentGreet
. Получили значение поля приветствия. Имя поля greet
. Используя
метод onContentBeforeDisplay
вывели наше приветствие.
Важно: Обратите внимание что приветствие мы вывели не через echo, а через return
Теперь нам осталось только запаковать папку greet
в zip архив и установить наш плагин через менеджер расширений joomla. Скачать плагин можно
нажав на кнопку download в начале статьи.
Комментарии
Александр
17.03.2019 21:46 Ответить
У вас в greet.xml не закрыт и установщик Джумлы ругается
Александр
17.03.2019 21:47 Ответить
тег < copyright > порезался в предыдущем сообщении. В общем он не закрыл у вас в XML
Алексей Григорьев
18.03.2019 08:24 Ответить
Александр спасибо, поправлю.