Комментарии

Что делает подключаемый модуль
( 0 Голосов )

Если проанализировать исходный код начальной HTML-страницы веб-сайта с установленными выборочными данными, то в элементе заголовка можно обнаружить следующие элементы метаданных.

Разрабатываемый нами подключаемый модуль будет очень простым. Он должен ввести атрибут "исправлено" в элемент метаданных HTML-документа, исходя из значения параметра, вводимого пользователем для настройки данного подключаемого модуля. В частности, он должен выдать следующий результат:

где атрибут content содержит текст, введенный в качестве значения параметра данного подключаемого модуля.

Для этого мы должны разобраться, каким образом в объекте типа JDocumentHTML хранятся данные элемента HTML-заголовка. Итак, проведем небольшое исследование. В сигнатуре метода fetchHead () из класса JDocumentRendererHead, где инициируется событие onBeforeCompileHead, мы обнаруживаем переменную $document. Она содержит ссылку на объект типа JDocumentHTML, у которого имеется метод getHeadData (), возвращающий данные заголовка для документа или страницы. Если ввести команду

var_dump($document->getHeadData());
в метод fetchHead(), например, непосредственно перед кодом, инициирующим событие, а затем отобразить начальную страницу на веб-сайте, то на нее будет выведен длинный перечень результатов выполнения метода getHeadData (), частично приведенных ниже.
array
'title' =>string 'Home' (length=4)
'description' => string 'My description.' (length=15)
'link' => string '' (length=0)
'metaTags' => array
'http-equiv' => array
'content- type' => string 'text/html' (length=9)
'standard' => array
'robots' => string 'index, follow' (length=13)
'keywords' => string 'My keywords.' (length=12)
'rights' => string 'My rights.' (length=10)
'language' => string 'en-GB' (length=5)

Если сравнить этот фрагмент кода с приведенным ранее исходным кодом HTML, то можно обнаружить, что элементы метаданных с атрибутами name хранятся в объекте в виде ассоциативного массива, который, в свою очередь, хранится в элементе разметки standard элемента разметки metaTags. Значение атрибута name (например, 'robots') является ключом к ассоциативному массиву, а значение атрибута content (в частности, 'index, follow') — значением для ассоциативного массива.

Нам требуется, чтобы подключаемый модуль вводил новый элемент разметки метаданных с атрибутом name, имеющим значение "revised", т.е. "исправлено", а также значение, которое может быть введено пользователем в качестве параметра в экранной форме компонента Plugin Manager. Кроме того, нам требуется сохранить любые существующие элементы разметки метаданных, добавив к ним лишь один новый элемент. Для этого подключаемый модуль должен выполнять следующее.

  1. Считывать имеющиеся данные заголовка из документа. Эти данные могут быть представлены массивом, аналогичным приведенному ранее.
  2. Добавить элемент в ассоциативный массив, хранящийся в элементе standard разметки массива внутри элемента разметки metaTags. Ключ этого массива будет "исправлен", а данные — введены пользователем в качестве параметра.
  3. Записать видоизмененный массив обратно в объект документа, используя метод setHeader Data (), являющийся зеркальным отражением метода getHeaderData (), дополняя его.
  4. И наконец, сделать все это только при наличии данных, введенных в качестве параметра подключаемого модуля, а иначе — ничего не делать.

Итак, перейдем непосредственно к разработке подключаемого модуля. Для этого выполните следующие действия.

  1. Создайте папку для нового подключаемого модуля. Наш подключаемый модуль будет называться mymeta, поэтому создайте папку plugins/system/mymeta.
  2. Для сохранения вводимых данных можно скопировать ряд уже имеющихся файлов и только поправить их. В частности, скопируйте файлы index.html, рЗр. php и рЗр. xml из папки plugins/system/p3p в новую папку plugins/system/mymeta. Затем переименуйте файлы рЗр.php и рЗр.xml на mymeta. php и mymeta. xml соответственно.
  3. Внесите поправки в файл mymeta.xml так, как показано в листинге ниже. В данном случае требуется внести изменения в XML-дескрипторы имени (name), автора (author), даты создания (creationDate), сведений об авторском праве (copyright), описания (description) и имени файла (filename).

Листинг: Исходный код из файла mymeta.xml

My Meta Plugin
Mark Dexter and Louis Landry
January 2012
Copyright (С) 2012 Mark Dexter and Louis Landry. All rights reserved.
GNU General Public License version 2 or later; see LICENSE.txt
admin@joomla.org
www.joomla.org
2.5.0
My Meta Plugin mymeta.php
index.html

Как показано выше, необходимо изменить полностью элемент разметки field, чтобы иметь возможность вводить новый параметр. Для этого установите значение revised в атрибуте name, а также значение text в атрибуте type. Кроме того, нужно установить соответствующие значения в атрибутах description, label и size данного элемента разметки.

Итак, код для организации ввода параметра подключаемого модуля уже имеется. Далее необходимо написать сам подключаемый модуль. В листинге 5.3 приведен исходный код подключаемого модуля, сохраняемый в файле mymetа.php.

В качестве завершающей проверки перейдите к редактору подключаемых модулей (Plugin Editor) и очистите поле Revised Content. Затем отобразите еще раз начальную страницу веб-сайта и проверьте ее исходный код, как пояснялось выше. Теперь дескриптор метаданных с атрибутом name="revised" должен отсутствовать, поскольку отсутствует содержимое, помеченное этим дескриптором.

По зрелом размышлении можно по достоинству оценить, насколько просто было внести описанные выше изменения с помощью подключаемого модуля. Для этого оказалось достаточно добавить в систему два новых файла и отредактировать несколько строк кода. Учитывая столь малые затраты труда, можно было бы аналогичным образом изменить содержимое элемента разметки заголовка на каждой странице веб-сайта.


Понравился материал? Пригодилась информация? Плюсани в социалки!


 
Похожие новости
Добавить комментарий


Защитный код