Создание системного плагина 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-разработка