воскресенье, 6 апреля 2014 г.

Битрикс. Экспорт новостей в RSS. Про то как лыжи не едут.

"Эпиграфом" к этому посту лучше всего подойдет расхожая фраза, то ли я ... то ли лыжи не едут ;) Вообщем имеется последняя редакция CMS Битрикс Управление Сайтом. Требовалось реализовать простейший функционал, экспорт новостей из списка в RSS ленту. Делается вроде бы все просто и очевидно. Берем комплексный компонент новости, вставляем его на нужную страницу в визуальном редакторе. Наполняем инфоблок новостями. И теперь, казалось бы, нужно просто поставить галочку "Экспорт RSS" в параметрах компонента. Ставим, вуаля ... появляется иконка RSS. Но при нажатии на нее RSS лента отображается прямо в шаблоне компонента ;))) Т.е. пользователь видит в шаблоне сайта на экране что-то вроде:

<rss version="2.0">
<channel>
<title>Новости</title>
<link></link>http://unlockclub.ru
<description></description>
<lastbuilddate>Sun, 06 Apr 2014 00:05:36 +0400</lastbuilddate>
<ttl>60</ttl>
<item>
</item></channel></rss>

Прикольно. Но это совсем не то что мы хотели. Т.к. RSS лента никак не должна выводиться прямо в шаблон компонента. Курение мануалов и даже их чтение не дало нужно эффекта. Поэтому быстро был придуман "обходной путь". Создаем отдельный файл rss.php и прописываем в него следующий код:

<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");?>
<?$APPLICATION->IncludeComponent(
 "bitrix:rss.out",
 "",
 Array(
  "IBLOCK_TYPE" => "news",
  "IBLOCK_ID" => "3",
  "SECTION_ID" => "",
  "SECTION_CODE" => "",
  "NUM_NEWS" => "20",
  "NUM_DAYS" => "30",
  "RSS_TTL" => "60",
  "YANDEX" => "N",
  "SORT_BY1" => "ACTIVE_FROM",
  "SORT_ORDER1" => "DESC",
  "SORT_BY2" => "SORT",
  "SORT_ORDER2" => "ASC",
  "FILTER_NAME" => "",
  "CACHE_TYPE" => "A",
  "CACHE_TIME" => "3600",
  "CACHE_NOTES" => "",
  "CACHE_FILTER" => "N",
  "CACHE_GROUPS" => "Y"
 ),
false
);?>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");?>

После чего помещаем на страницу раздела линк на него:

<link rel="alternate" type="application/rss+xml" title="Новости UnlockClub.Ru" href="/news/rss.php" />

В результате мы получаем то, что хотели. Пользователь в адресной строке браузера видит что сайт поддерживает RSS:


А при клике по этому значку (по-крайней мере в Opera 12.16 на движке Presto) мы можем сразу просмотреть новостную ленту или подписаться на нее:


Бинго. Эффект достигнут ;)

p.s. Вот я и думаю ... то ли я ... то ли лыжи ... Казалось бы, с дефолтным шаблоном и дефолтными настройками комплексного компонента новости все должно работать "из коробки". Ан нет. Бесспорно, CMS Битрикс значительно эволюционировала за последние годы, но, при всем при этом, некоторый функционал, который до этого работал без проблем - теперь не работает, либо же существуют какие-то "нюансы". Информацию о которых невозможно найти ни в руководстве разработчика, ни где либо еще. Хотя, конечно, я могу и ошибаться ... 


1 комментарий :

  1. Можно создать пустой шаблон в котором будет только #WORK_AREA# и применить его к сайту с условием preg_match('/\\/rss\\/$/', $APPLICATION->GetCurDir()), тогда выставив в настройках комплексного компонента с ЧПУ параметр Страница RSS: rss/ , страница будет формироваться без основного шаблона

    ОтветитьУдалить