INOYAKAIGOR

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

Joomla 3 и RSS для Яндекса


Запись от: 2015-02-06 16:50:46

   Довелось тут поработать с новостным сайтом на Joomla 3.3.6. Обновлял с версии 1.5. Про то, как это сделать максимально легко я напишу чуть позже. Сейчас же о важной проблеме всплывшей на сайте: RSS. Сайт новостной и это для него критично. Более того, важным требованием было то, чтобы RSS соответствовал требованиям Яндекса.

Как минимум с третьей версии Joomla сама умеет генерировать RSS и он вполне валиден, но Яндекс требует внести некоторые изменения для своих новостей.

Начнём с того, что файл с генератором RSS находится в этой папке
yoursite.ru/libraries/joomla/document/feed/renderer/
и называется он (какая неожиданность!) rss.php. Пропатчить под свои нужды его, в общем-то, легко, но есть один нюанс: Яндекс требует добавлять полный текст новости для поискового бота, а стандартный класс

JDocumentRenderer
от которого наследуется класс
JDocumentRendererRSS
не имеет готовой функции получения полного текста только описание (description). Конечно, можно было найти в ядре Джумлы класс который умеет получать полный текст и соответствующе переписать класс генерации RSS, но я пошёл по пути наименьшего сопротивления: подставил вместо полного текста его описание.

ВАЖНОЕ ЗАМЕЧАНИЕ: Возможно, у вас будет генерироваться стразу несколько тегов
В гайде Я.новостей говорится, что он должен быть один. В таком случае смотрим каким по счёту идёт нужный нам тэг и меняем код на, примерно, такой:

if (empty($data->items[$i]->category) === false){
if (is_array($data->items[$i]->category)){
/*foreach ($data->items[$i]->category as $cat){
$feed .= "<category>" . htmlspecialchars($cat, ENT_COMPAT, 'UTF-8') . "</category>";
}*/

//грязнейший хак. т.к. фид идёт с тремя категориями (избранное, ЭКОНОМИКА/ОБЩЕСТВО/etc, тематика) берём среднюю.
$feed .= "<category>" . htmlspecialchars($data->items[$i]->category[1], ENT_COMPAT, 'UTF-8') . "</category>";

}else{
$feed .= "<category>" . htmlspecialchars($data->items[$i]->category, ENT_COMPAT, 'UTF-8') . "</category>";
}
}


Вот, вроде всё.

Скачать пропатченный файл можно на моём гитхабе

Теги: Joomla RSS Yandex Яндекс tips & tricks 

Комментарии:



©Игорь InoY Звягинцев