Cotonti сайт своими руками / Вебмастер / Веб-сайт

Изображения в rss ленте

04.03.2019 232

Здравствуйте, уважаемые читатели сайта cmscot.net. Есть разные форматы вывода rss, они стандартизированы определённым синтаксисом. В Cotonti вывод ленты в xml формат осуществляется с помощью модуля, который называется: Rss. Он выводит готовый список, но по умолчанию нет вывода картинки. С появлением всё большего числа различных читалок, агрегаторов для экспорта контента, вывод изображения в rss желателен, а в некоторых сервисах обязателен.

Изображения в rss

Что нужно для прикрепления изображений

Для того чтобы выводить изображения в rss ленту динамически, нужно чтобы они изначально были прикреплены к выводимому контенту (загружены). Это можно сделать с помощью плагина Attacher, так как в нём предусмотрена возможность вывода как самого изображения, так и получения его размера и mime типа.

Будем исходить из того, что плагин Attacher уже установлен, настроен, изображения загружены, и теперь хотелось бы вывести миниатюру картинки в ленту rss. В качестве примера возьмем два модуля:

  1. Page -  модуль страниц из стандартной сборки Cotonti.
  2. Projects -  модуль проектов для фриланс биржи.

Для работы со стандартными расширениями Cotonti, входящими в официальную сборку, достаточно установить и настроить плагин Attacher. Для работы с модулями биржи (projects, folio, market) нужно будет дополнительно установить плагин Attacherfreelance.

Как выводить изображения в rss ленте

Благодаря особенностям архитектуры Cotonti, есть возможность делать копии файлов tpl, и размещать их в папке шаблона, без необходимости править оригинал. С учетом этого, удобнее будет создать одноименную структуру внутри шаблона (темы). Для этого нужно создать в шаблоне папку modules, внутри неё папку rss, и скопировать туда файл rss.tpl из /modules/rss/tpl/rss.tpl.

Первое что понадобится для получения параметров прикрепленного изображения это ID статьи. Помимо этого нужны будут несколько функций плагина Attacher. Готовые конструкции кода нужно добавить в копию файла rss.tpl, который теперь находится в /themes/ваш шаблон/modules/rss/tpl/rss.tpl.

Вывод картинки в rss c помощью img

Для модуля page в нужном месте добавить:

<!-- IF {PHP.item.fields.ID|att_count('page',$this,'','images')} > 0 -->
<img src="{PHP.cfg.mainurl}/{PHP.item.fields.ID|att_get('page',$this,'')|att_thumb($this,400,300,'crop')}" alt="{RSS_ROW_TITLE}">
<!-- ENDIF -->

Для модуля projects в нужном месте добавить:

<!-- IF {PHP.item.fields.ID|att_count('projects',$this,'','images')} > 0 -->
		<img src="{PHP.cfg.mainurl}/{PHP.item.fields.ID|att_get('projects',$this,'')|att_thumb($this,400,300,'crop')}" alt="{RSS_ROW_TITLE}">
<!-- ENDIF -->

Вывод изображения в rss с помощью enclosure

Для того чтобы различные читалки могли интерпретировать изображение, в спецификации RSS есть специальный элемент - enclosure, у которого должны быть указаны обязательные параметры:

length -  размер (в байтах) медиа-файла
type  - mime тип медиа файла
url - путь к медиа-файлу

Так как rss лента формируется динамически, нужно получать эти параметры таким же образом. Для этого нужно будет вызывать функции плагина Attacher, с определёнными параметрами запроса:

Для модуля page после:

<title>{RSS_ROW_TITLE}</title>

добавить:

<!-- IF {PHP.item.fields.ID|att_count('page',$this,'','images')} > 0 -->
<enclosure url="{PHP.cfg.mainurl}/{PHP.item.fields.ID|att_get('page',$this,'')|att_thumb($this,400,300,'crop')}" type="{PHP.item.fields.ID|att_get('page',$this,'')|att_thumb($this,400,300,'crop')|att_getMime}" length="{PHP.item.fields.ID|att_get('page',$this,'')|att_thumb($this,400,300,'crop')|filesize}"/>
<!-- ENDIF -->

Для модуля projects после:

<title>{RSS_ROW_TITLE}</title>

добавить:

<!-- IF {PHP.item.fields.ID|att_count('projects',$this,'','images')} > 0 -->
<enclosure url="{PHP.cfg.mainurl}/{PHP.item.fields.ID|att_get('projects',$this,'')|att_thumb($this,400,300,'crop')}" type="{PHP.item.fields.ID|att_get('projects',$this,'')|att_thumb($this,400,300,'crop')|att_getMime}" length="{PHP.item.fields.ID|att_get('projects',$this,'')|att_thumb($this,400,300,'crop')|filesize}"/>
<!-- ENDIF -->

Вот таким образом можно выводить в rss ленту изображения, прикреплённые с помощью плагина Attacher. Помимо этого можно выводить логотип канала, для этого плагин загрузки изображений не нужен.

Вывод изображения как логотипа rss канала

Помимо указанных выше вариантов, есть еще элемент <image>, с помощью которого можно вывести логотип сайта при показе ленты в агрегаторах. У него есть несколько обязательных тегов:

  • <link> - определяет гиперссылку на сайт, который предлагает канал
  • <title> - текст для отображения, если изображение не может быть показано
  • <url> - путь к изображению

Также есть дополнительные, такие как <description>,<height>,<width>, о них можно почитать перейдя по ссылке выше. А в текущем примере будет показано применение тех, которые являются обязательными. Для наглядности подставим динамические переменные для title (пусть это будет заголовок главной страницы) и link (из конфига сайта). Параметр url, для примера, возьмем исходя из того, что логотип лежит в папке img шаблона, и называется logo.png.

Перед:

<!-- BEGIN: ITEM_ROW -->

добавить:

<image>
	<url><![CDATA[{PHP.cfg.mainurl}/{PHP.cfg.themes_dir}/{PHP.cfg.defaulttheme}/img/logo.png]]></url>
	<title>{PHP.cfg.maintitle}</title>
	<link><![CDATA[{PHP.cfg.mainurl}]]></link>
</image>

В url попадёт динамический путь к изображению логотипа сайта, в title - домен с большой буквы, в link - ссылка на главную страницу сайта.

Веб-сайт: «Изображения в rss ленте»

Если вам была полезна эта информация, будьте добры, поделитесь ею в социальных сетях. Это послужит дополнительным мотиватором, стимулом к дальнейшим публикациям на cmscot.net статей на интересующие вас темы.
Cmscot

Близкие по теме «Изображения в rss ленте»

Нет записей