Добавление доп. поля метатега 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);
};