Содержание
Интеграция ленты RSS для своего компонента
В комплекте InstantCMS есть компонент «Генератор RSS», выполняющий генерацию RSS лент на сайте. Архитектура построена таким образом, что позволяет генерировать ленты RSS для любого компонента. Интеграция заключается в:
- Создание записи в таблице
cms_rss_feeds
; - Создании хука
rss_feed_list
для получения из него данных; - При необходимости, дополнить настройки RSS ленты (её форму) также посредством хуков.
Создание записи в таблице
Если вы делаете компонент, который впоследствии оформите в пакет дополнения, то создание записи в таблице rss_feed_list
необходимо делать в установщике пакета.
Типичный SQL запрос на добавление записи выглядит так (на примере компонента «Комментарии»):
INSERT INTO `cms_rss_feeds` (`ctype_name`, `title`, `mapping`, `is_enabled`) VALUES ('comments', 'Комментарии', '---\r\ntitle: target_title\r\ndescription: content_html\r\npubDate: date_pub\r\n', 1);
В поле mapping вы должны в YAML формате указать соответствия полей используемых в самой RSS ленте с полями в вашей записи:
- Поле title (в примере выше title соответствует полю target_title в таблице комментариев);
- Поле description (в примере выше поле description соответствует полю content_html в таблице комментариев);
- Поле pubDate (в примере выше поле pubDate соответствует полю date_pub в таблице комментарие).
Удобнее всего сделать это в массиве, который потом преобразовать в YAML.
Создание хука
Для того, чтобы получить данные для RSS ленты вашего компонента, необходимо создать хук с названием cms_rss_feeds
. Обратите внимание, для этого хука не нужно создавать запись в файле manifest.php вашего компонента. Хук вызывается напрямую, в контексте вашего контроллера. Объект $this→request внутри хука будет также в контексте текущего запроса, тип запроса - стандартный.
В хук передаётся один параметр $feed
, это массив данных ленты, полученный из базы данных.
Возвращать хук должен массив массивов array($feed, $category, $author)
. Где, $feed
- переданный массив ленты в хук, $category
- массив категории, если необходимо, $author
- массив данных об авторе, если необходимо.
Если массивы $category
и $author
в вашем компоненте не актуальны, то они должны быть переданы пустыми, иначе массивы должны содержать:
$category
- ячейку title с названием категории;$author
- ячейку nickname с никнеймом пользователя.
$category = array( 'title' => 'Название категории' ); $author= array( 'nickname ' => 'ЮзерНейм' );
Задача хука заполнить ячейку $feed['items']
списком данных ленты.
Каждая запись в массиве $feed['items'] должна содержать ячейки target_title
и page_url
с заголовком и абсолютным URL соответственно. Кроме этого, каждая запись должна содержать значения соответствий поля mapping, которые мы указывали в SQL запросе выше.