Экспорт в RSS на UMI CMS
Рубрика: Решения
Не устаю повторять, что UMI CMS на сегодня является самой современной, самой прозрачной и самой удобной системой управления сайтами. И речь даже не о той прекрасной технологии Edit In Place, до которой Битриксу еще расти и расти, а дело в том, что с помощью ЮМИ можно реализовать такие вещи, которые в стандартной комплектации Битрикса или любой другой системы выглядят абсолютно непрозрачно. Например экспорт в RSS любого контента, который только возможен (зачастую речь идет о новостях, но это далеко не всегда так).
Кстати сказать, штатного такого функционала я не обнаружил. Видимо это связано с достаточно простой реализацией этого функционала самостоятельно. Но, тем не менее хотя бы какое-то упоминание об этом хотелось бы увидеть в документации.
Итак, чтобы экспортировать что-то в RSS нужно пройти 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.
На что тут стоит обратить внимание:
- <type id=»52″ />. 52 — это идентификатор типа данных «Страница контента» в моей установке. Вы можете взять любой другой тип, какой вам заблагорассудится. Например, новости у меня идут с идентификатором 55.
- <category>{1}</category> — первый передаваемый безымянный параметр — это идентификатор родителя. То есть я получаю список страниц, лежащих в каком-то подразделе. Обычно так и делают, чтобы сохранить управляемость систмы и не потерять что куда запихивается.
- <extended><properties>h1, header_pic, anons, data_publikacii</properties></extended> — сразу получаю нужные мне поля. В данном случае заголовок, картинку, анонс, дату публикации.
- <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>
Тут все незамысловато: один шаблон вывода корня и один шаблон вывода для страниц. Причем, как вы видите, очень многое прописано жестко в коде без детализации. В вашем случае название домена или же описание для страницы можно дописать, выбрав нужные данные из соответствующих полей системы.
Июн12
10 Июл 2018 в 9:46
Добрый день, Александр!
Вот никак не могу создать дополнительный RSS к сайту, попытался по Вашей статье, но тоже увы, созданный шаблон не виден в «добавлении страницы».
Может быть посоветуете какую-то публикацию с инструкцией по изготовлению RSS? Как-то прозводители UMI обошли этот вопрос стороной.
Спасибо.
11 Июл 2018 в 23:06
Добрый день. Дмитрий.
Не очень понятна формулировка «Созданный шаблон не виден в добавлении страницы». Дело в том, что созданный шаблон для начала необходимо добавить в список шаблонов, что находится в настройках модуля «Структура». Только после этого его можно применять к каким-то страницам. Вы сделали это?
11 Окт 2018 в 21:07
Здравствуйте. А если сайт сделан на php шаблонизаторе, то что делать в этом случае?
13 Окт 2018 в 23:00
Вне зависимости от того, на какой технологии сделан ваш сайт сейчас вы всегда сможете подключить к нему на отдельные страницы или же на весь сайт другой шаблон на технологии XSLT.
Ваш выбор технологии PHP для шаблонизатора сопровождается огромным количеством трудностей. Ваша текущая ситуация — лишь один из примеров, демонстрирующих это. Так что, если говорить с философской точки зрения, вам остается только грустить и бороться с проблемами по мере их появления.