Добавление доп. поля метатега Title в статьи
Для этого произвести операцию из 3-х пунктов.
1. Надо добавить поле в форму article.xml соответствующие поле, а для этого создать контент плагин примерно следующего содержания.
// No direct access defined('_JEXEC') or die; jimport('joomla.plugin.plugin'); class plgContentAddtitlefeld extends JPlugin { /** * Контент метод добавления полей в форму редактирования статьи * * Метод вызывается перед визуализацией формы JForm. * Он может использоваться для изменения JForm объекта в памяти перед отрисовкой. * * @param string форма. Объект JForm для отображения. * @param object data Объект, содержащий данные для формы. * @return boolean Значение true, если метод выполнен успешно. * @since 1.6 */ public function onContentPrepareForm($form, $data) { // Если мы не в нужной форме - просто завершаем метод if ($form->getName() != 'com_content.article') { return; } // Загрузить плагин языковой файл $this->loadLanguage(); // Загрузите наши пользовательские регистрации xml в форму регистрации пользователя. $form->loadFile(dirname(__FILE__).'/forms/form.xml'); } }
Файл манифест.
<?xml version="1.0" encoding="utf-8"?> <install version="1.5" method="upgrade" type="plugin" group="content"> <name>Addtitlefeld</name> <creationDate>2013-01-08</creationDate> <author>Vadim Rigin</author> <authorEmail>vadim@rigin.net<;;/authorEmail> <authorUrl>www.rigin.net</authorUrl> <copyright>Copyright (C) 2013 Open Source Matters. All rights reserved.</copyright> <license>GPL2</license> <version>1</version> <description>PLG_ADDTITLEFELD_DESC</description> <files> <filename plugin="addtitlefeld">addtitlefeld.php</filename> <filename>index.html</filename> <folder>forms</folder> </files> <languages folder="language"> <language tag="en-GB">en-GB.plg_content_addtitlefeld.ini</language> <language tag="en-GB">en-GB.plg_content_addtitlefeld.sys.ini</language> <language tag="ru-RU">ru-RU.plg_content_addtitlefeld.ini</language> <language tag="ru-RU">ru-RU.plg_content_addtitlefeld.sys.ini</language> </languages> </install>
Файл в данном случае /forms/form.xml
<?xml version="1.0" encoding="utf-8"?> <form> <fields name="metadata"> <field name="html_title" type="text" label="HTML Title" description="HTML Title" size="50" /> </fields> </form>
2. Надо переопледелить шаблон вывода article/default.php компонента com_content добавив в него код копирующий данное поле в объект JDocument
$doc = JFactory::getDocument(); $doc->set('article_title',$this->escape($this->item->metadata->get('html_title')));
3. надо вывести это поле в коде шаблона соответственно в Title
// добавление значения title из поля в meta $doc = JFactory::getDocument(); $article_title = $doc->get('article_title'); if (isset($article_title) and trim($article_title) != '') { $this->title = $article_title; };
Вариант для joomla 3
Во- первых манифест файл требует изменений - замены тега install на тег extension.
<?xml version="1.0" encoding="utf-8"?> <extension version="3.0" type="plugin" group="content"> <name>Addtitlefeld</name> <creationDate>2013-01-08</creationDate> <author>Vadim Rigin</author> <authorEmail>vadim@rigin.net<;;;/authorEmail> <authorUrl>www.rigin.net</authorUrl> <copyright>Copyright (C) 2013 Open Source Matters. All rights reserved.</copyright> <license>GPL2</license> <version>1</version> <description>PLG_ADDTITLEFELD_DESC</description> <files> <filename plugin="addtitlefeld">addtitlefeld.php</filename> <filename>index.html</filename> <folder>forms</folder> </files> <languages folder="language"> <language tag="en-GB">en-GB.plg_content_addtitlefeld.ini</language> <language tag="en-GB">en-GB.plg_content_addtitlefeld.sys.ini</language> <language tag="ru-RU">ru-RU.plg_content_addtitlefeld.ini</language> <language tag="ru-RU">ru-RU.plg_content_addtitlefeld.sys.ini</language> </languages> </extension>
За одно введем добавление поля title в форму редактирования категорий статей доработав основной файл плагина.
<?php // No direct access defined('_JEXEC') or die; jimport('joomla.plugin.plugin'); class plgContentAddtitlefeld extends JPlugin { /** * Контент метод добавления полей в форму редактирования статьи * * Метод вызывается перед визуализацией формы JForm. * Он может использоваться для изменения JForm объекта в памяти перед отрисовкой. * * @param string форма. Объект JForm для отображения. * @param object data Объект, содержащий данные для формы. * @return boolean Значение true, если метод выполнен успешно. * @since 1.6 */ public function onContentPrepareForm($form, $data) { // Если мы не в нужной форме - просто завершаем метод if ($form->getName() != 'com_content.article' and $form->getName() != 'com_categories.categorycom_content') { return; }; // Загрузить плагин языковой файл $this->loadLanguage(); // Загрузите наши пользовательские регистрации xml в форму регистрации пользователя. $form->loadFile(dirname(__FILE__).'/forms/form.xml'); } }
Структура полей формы немного поменялась, соответственно изменилась и структура xml файла с добавочными полями
<?xml version="1.0" encoding="utf-8"?> <form> <fields name="metadata"> <fieldset name="addmetadata" label="JGLOBAL_FIELDSET_METADATA_OPTIONS"> <field name="html_title" type="text" label="HTML Title" description="HTML Title" size="50" /> </fieldset> </fields> </form>
Добавочные строки в файлы переопределения шаблонов тоже поменялись в связи с изменением в классе JDocument
article/default.php
// Чтение поля title из метаданных if ($this->item->metadata->get('html_title') != null) { $doc = JFactory::getDocument(); $doc->article_title = $this->escape($this->item->metadata->get('html_title')); }
Поскольку мы расширили действия плагина на категории статей, то надо переопределить и шаблоны представления category и categories компонента com_content
Файл categories/default.php
// Чтение поля title из метаданных $metadata = json_decode($this->parent->metadata); if (isset($metadata->html_title) and $metadata->html_title != '') { $doc = JFactory::getDocument(); $doc->article_title = $this->escape($metadata->html_title); };
Файл category/default.php
// Чтение поля title из метаданных if ($this->category->metadata->get('html_title') != null) { $doc = JFactory::getDocument(); $doc->article_title = $this->escape($this->category->metadata->get('html_title')); }
Файл category/blog.php
// Чтение поля title из метаданных if ($this->category->metadata->get('html_title') != null) { $doc = JFactory::getDocument(); $doc->article_title = $this->escape($this->category->metadata->get('html_title')); }
Ну и добавляем строки размещающие поле title в документ в файле index.php шаблона
index.php
// добавление значения title из поля в meta $doc = JFactory::getDocument(); if (isset($doc->article_title)) { $this->title = $doc->article_title; unset($doc->article_title); };