Создание системного плагина Joomla
09.06.2013
Теги: CMS • Joomla • Web-разработка
Напишем простой плагин Joomla для обработки события onBeforeCompileHead. Это событие позволяет видеоизменить любой элемент внутри тега <head> HTML-документа перед его выводом в браузер. С помощью этого плагина можно добавить, изменить или удалить мета-теги, js-скрипты, css-стили и т.п.
Событие onBeforeCompileHead инициируется в методе fetchHead() класса JDocumentRendererHtml (из файла libraries/joomla/document/html/renderer/head.php). Метод считывает данные для элемента <head> HTML-документа и выводит их в буфер в формате HTML для дальнейшей отправки браузеру. Код, инициирующий данное событие:
public function fetchHead(&$document) { // Trigger the onBeforeCompileHead event // (skip for installation, since it causes an error) $app = JFactory::getApplication(); $app->triggerEvent('onBeforeCompileHead'); // .......... }
Наш системный плагин будет очень простым. Он добавит мета-тег revised (исправлено), исходя из значения параметра, введенного администратором сайта
<meta name="revised" content="Vasya Pupkin, 9 June 2013" />
где атрибут content как раз и содержит текст, введенный администратором.
Для начала разберемся, каким образом в объекте типа JDocumentHtml хранятся данные HTML-заголовка. Класс JDocumentHtml имеет метод getHeadData(), позволяющий получить всю необходимую нам информацию. Добавим print_r() внутрь метода fetchHead():
public function fetchHead(&$document) { print_r($document->getHeadData()); // Trigger the onBeforeCompileHead event // (skip for installation, since it causes an error) $app = JFactory::getApplication(); // .......... }Результат:
Array
(
[title] => Home
[description] => My description
[link] =>
[metaTags] => Array
(
[http-equiv] => Array
(
[content-type] => text/html
)
[standard] => Array
(
[keywords] => My keywords
[rights] => My rights
)
)
[links] => Array
(
..........
)
[styleSheets] => Array
(
..........
)
[style] => Array
(
..........
)
[scripts] => Array
(
..........
)
[script] => Array
(
..........
)
[custom] => Array
(
..........
)
)
Создадим папку plugins/system/mymeta для нашего плагина и поместим в нее три файла:
index.html
<!DOCTYPE html><title></title>
mymeta.php
<?php /** * @copyright Copyright (C) 2013 Vasya Pupkin. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ // no direct access defined('_JEXEC') or die; /** * Пример системного плагина */ class plgSystemMyMeta extends JPlugin { function onBeforeCompileHead() { if ( $this->params->get('revised') ) { $document = JFactory::getDocument(); $headData = $document->getHeadData(); $headData['metaTags']['standard']['revised'] = $this->params->get('revised'); $document->setHeadData($headData); } } }
mymeta.xml
<?xml version="1.0" encoding="utf-8"?> <install version="2.5" type="plugin" group="system"> <name>My Meta Plugin</name> <author>Vasya Pupkin</author> <creationDate>June 2013</creationDate> <copyright>Copyright (C) 2013 Vasya Pupkin. All rights reserved.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>pupkin.v@mail.ru</authorEmail> <authorUrl>www.pupkin.ru</authorUrl> <version>2.5.0</version> <description>My meta plugin</description> <files> <filename plugin="mymeta">mymeta.php</filename> <filename>index.html</filename> </files> <config> <fields name="params"> <fieldset name="basic"> <field name="revised" type="text" description="Meta revised text for content attribute" label="Revised content" default="" size="50" /> </fieldset> </fields> </config> </install>
Теперь наш плагин готов к применению. Но он пока неизвестен в установке Joomla. Хотя все файлы находятся в нужных папках, для нового плагина отсутствует запись в таблице БД #__extensions.
Воспользуемся средством «Discover (Обнаружение)». В административной части переходим Extensions=>Extensions Manager=>Discover (Расширения=>Менеджер расширений=>Поиск). Щелкаем по иконке «Найти».
Отмечаем найденный плагин (флажок слева) и щелкаем по иконке «Install (Установить)». В итоге получим сообщение об успешной установке плагина.
Теперь проверим наш плагин в действии. Идем Extensions=>Plugin Manager (Расширения=>Менеджер плагинов), фильтруем список всех плагинов по слову «meta», активирум наш плагин, щелкнув по иконке «Enabled (Включить)».
Далее переходим к редактированию плагина, вводим любые данные в поле «Revised content»
Теперь переходим в общедоступную часть сайта, обновляем страницу, смотрим исходный код:
Поиск: CMS • Joomla • Web-разработка



