Joomla: использовать API внутри статьи - PullRequest
0 голосов
/ 24 апреля 2011

Я использую плагин Sourcerer для использования кода PHP внутри моих статей.Я хотел бы использовать API / фреймворк Joomla внутри моей статьи, чтобы динамически устанавливать метатеги HTML и другие вещи. Я нашел метод setHeadData, который должен позволять мне это делать, но я просто не знаю, как его вызывать.

[Q] Может кто-нибудь привести мне 1 пример илиукажите мне учебник, который поможет мне начать использовать этот API / Framework Joomla, пожалуйста?

Ответ

На основе многочисленных отзывов, все указывают вВ том же направлении использование плагина контента для изменения данных заголовка лучше, чем делать это через статью.Если, как и я, вы хотите сделать это в статье, вот что я сделал:

(1) Я использовал фрагмент, предоставленный ezpresso, для установки данных заголовка в моей статье.
(2) Я изменилфайл library / joomla / document / html / renderer / head.php для изменения способа установки данных заголовка.

Например, вы можете установить метатег title на шаге (1) и затем на шаге (2) замените следующую строку:

$strHtml .= $tab.'<title>'.htmlspecialchars($document->getTitle()).'</title>'.$lnEnd;

этой:

$strHtml .= $tab.'<title>'.htmlspecialchars($document['metaTags']['standard']['title']).'</title>'.$lnEnd;

Возможно, вы также захотите заглянуть в библиотеки / joomla /document / html / renderer / head.php для дополнительной очистки головы, например избавления от метатега generator, который вставляет Joomla.

Ответы [ 2 ]

1 голос
/ 24 апреля 2011

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

1 голос
/ 24 апреля 2011

Вот исходный код метода, на который вы ссылаетесь:

/**
 * Set the html document head data
 *
 * @access  public
 * @param   array   $data   The document head data in array form
 */
function setHeadData($data)
{
    $this->title        = (isset($data['title'])) ? $data['title'] : $this->title;
    $this->description  = (isset($data['description'])) ? $data['description'] : $this->description;
    $this->link         = (isset($data['link'])) ? $data['link'] : $this->link;
    $this->_metaTags    = (isset($data['metaTags'])) ? $data['metaTags'] : $this->_metaTags;
    $this->_links       = (isset($data['links'])) ? $data['links'] : $this->_links;
    $this->_styleSheets = (isset($data['styleSheets'])) ? $data['styleSheets'] : $this->_styleSheets;
    $this->_style       = (isset($data['style'])) ? $data['style'] : $this->_style;
    $this->_scripts     = (isset($data['scripts'])) ? $data['scripts'] : $this->_scripts;
    $this->_script      = (isset($data['script'])) ? $data['script'] : $this->_script;
    $this->_custom      = (isset($data['custom'])) ? $data['custom'] : $this->_custom;
}

Он реализован в классе JDocumentHtml, который находится в каталоге libraries/joomla/document/html/html.php.

Ниже приведены ссылки на некоторые примеры того, как его использовать:

Полагаю, вы можете вызвать метод setHeadData следующим образом:

$doc =& JFactory::getDocument();
$options = $doc->getHeadData();
$options['metaTags'] = array("tag1", "tag2", "tag3"); // you may change the meta tags here
$doc->setHeadData($options); 
...