Экспорт в RSS на UMI CMS

Не устаю повторять, что UMI CMS на сегодня является самой современной, самой прозрачной и самой удобной системой управления сайтами. И речь даже не о той прекрасной технологии Edit In Place, до которой Битриксу еще расти и расти, а дело в том, что с помощью ЮМИ можно реализовать такие вещи, которые в стандартной комплектации Битрикса или любой другой системы выглядят абсолютно непрозрачно. Например экспорт в RSS любого контента, который только возможен (зачастую речь идет о новостях, но это далеко не всегда так).

Кстати сказать, штатного такого функционала я не обнаружил. Видимо это связано с достаточно простой реализацией этого функционала самостоятельно. Но, тем не менее хотя бы какое-то упоминание об этом хотелось бы увидеть в документации.

Итак, чтобы экспортировать что-то в RSS нужно пройти 2 стадии:

  1. Получить данные для экспорта
  2. Вывести данные в нужном виде

Получение данных

Самый простой способ получить данные — это USEL. Конечно, этот способ немного более затратен, чем любой макрос. Зато он и быстрее реализуется.

Приведу простой пример для получения данных по идентификатору родителя элемента.


<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type id="52" />
<category>{1}</category>
</target>
<property name="is_active" value="1" />
<extended>
<properties>h1, header_pic, anons, data_publikacii</properties>
</extended>
<limit page="0">{limit}</limit>
</selection>

Это пример кода для ващего usel. Его нужно сохранить в папке usels вашего шаблона под каким-то именем, например rss.xml.

На что тут стоит обратить внимание:

  1. <type id=»52″ />. 52 — это идентификатор типа данных «Страница контента» в моей установке. Вы можете взять любой другой тип, какой вам заблагорассудится. Например, новости у меня идут с идентификатором 55.
  2. <category>{1}</category> — первый передаваемый безымянный параметр — это идентификатор родителя. То есть я получаю список страниц, лежащих в каком-то подразделе. Обычно так и делают, чтобы сохранить управляемость систмы и не потерять что куда запихивается.
  3. <extended><properties>h1, header_pic, anons, data_publikacii</properties></extended> — сразу получаю нужные мне поля. В данном случае заголовок, картинку, анонс, дату публикации.
  4. <limit page=»0″>{limit}</limit> — лимитирую выдачу. Ну зачем мне 100 тысяч записей? Мне достаточно нескольких последних.

Вывод данных

Чтобы вывести полученные данные я создам отдельную страницу и отдельный шаблон для неё. Это позволит мне в произвольный момент времени закрывать доступ к потоку rss через административную зону, например закрыв публикацию этой страницы.

В моем случае я создал страницу rss и задал ей шаблон rss. Шаблон rss.xslt я положил в папочку xslt своего шаблона.

Выглядит мой шаблон так:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xlink="http://www.w3.org/TR/xlink">
<xsl:output encoding="utf-8" method="xml" indent="yes"/>
<xsl:template match="/">
<rss version="2.0">
<channel>
<title>RSS моего сайта</title>
<link>http://umicms.me/</link>
<description>umicms.me rss</description>
<pubDate>Thu, 12 Jun 2014 21:30:30 +0400</pubDate>
<image>
<url />
<title />
<link />
</image>
<xsl:apply-templates select="document('usel://rss/115/?limit=5')//page" />
</channel>
</rss>
</xsl:template>
<xsl:template match="page">
<item>
<title><xsl:value-of select=".//property[@name = 'h1']/value" /></title>
<link>http://umicms.me<xsl:value-of select="@link" /></link>
<description><xsl:value-of select=".//property[@name = 'anons']/value" /></description>
<guid>http://umicms.me<xsl:value-of select="@link" /></guid>
<pubDate><xsl:value-of select=".//property[@name = 'data_publikacii']/value" /></pubDate>
</item>
</xsl:template>
</xsl:stylesheet>

Тут все незамысловато: один шаблон вывода корня и один шаблон вывода для страниц. Причем, как вы видите, очень многое прописано жестко в коде без детализации. В вашем случае название домена или же описание для страницы можно дописать, выбрав нужные данные из соответствующих полей системы.

Простой и понятный online-курс для обучения XSLT-программиста с любого базового уровня

Июн12

Ваш отзыв