Если вы являетесь СМИ (или ваш клиент является СМИ), то наверняка будет задача экспорта новостей с сайта в "Яндекс Новости". Задача только на первый взгляд кажется сложной.
Итак, что такое "экспорт в Яндекс Новости". Нужно создать RSS ленту определенного формата. 80% нужных нам xml элементов нам может предоставить модуль views_rss. Но для Яндекса этого мало. По документации нужно еще добавить
в заголовок RSS. С этим нам поможет модуль созданный Андреем Березовским (duozersk) - views_rss_yandex и с недавнего времени поддерживаемый мной.
Так же модуль предоставляет элементы:
- yandex:full-text
- yandex:genre
- yandex:enclosure (но он пока не работает должным образом)
Естественно я сразу подготовил версию для Drupal 9+
Однако, включить модули недостаточно. Нужно еще создать представление (views) типа "поток"
На что нужно обратить внимание:
- Яндекс принимает новости только за последние 7 дней, поэтому делаем соответствующий критерий фильтрации
- Заголовок не должен иметь в себе ссылку (снимаем галочку "ссылается на содержимое")
- Добавляем поле "ссылка на содержимое" и переключаем её в режим "только URL". Эту ссылку нужно использовать для элемента link
- Для элемента pubDate нужно добавить поле "создан в" и переключить формат даты на RFC 822 (предоставляется модулем views_rss_yandex)
Техподдержка Яндекса проверяет каждую новость и обязательно скажет вам, что "вот это вот новостью не является". Я рекомендую добавить к типу материала поле-галочку "Не выгружать в Яндекс Новости" и ставить её нодам отбракованным техподдержкой Яндекса. Таким образом они смогут остаться на вашем сайте, но будут исключены из ленты RSS для Яндекса.
Планы на будущее:
- Нужно разобраться с работой yandex:enclosure, чтобы появилась возможность выгружать изображения и видео в новости
Если вы хотите помочь с разработкой, тестированием, написанием документации, то добро пожаловать. Пишите в любые каналы связи.
Комментарии
У меня в голове крутится идея вывести RSS поток черeз views. Не использовать отображения типа Поток данных, а вывести поля, обрамить их нужными тегами, + изменить html.html.twig и page.html.twig для данной вьюхи.
Так ведь можно и изображения и видео и все что хочешь вывести.
Слишком сложно, не находишь?
Нет. Ведь так не нужно ничего программировать.
Ты статью-то читал? Там написано:
1) включить модули
2) создать вьюху
Да, но т. обр. фид формируется слишком стандартизировано. Я же предлагаю выводить то, что нужно, а не то что в модуле.
Яндекс его кушает и это главное
Попробую, спасибо
У меня получается ошибка в яндекс валидаторе:
Не найдено описание для элемента "rss". Возможно неверно указан корневой элемент.
Строка: 2Позиция: 604
Подробнее
cvc-elt.1.a: Cannot find the declaration of element 'rss'.
Не понимаю в чем проблема, помогите пожалуйста.
Если в содержимом используется модуль параграфа, а не просто текст, вьюс выведет все его элементы с разметкой через запятую. Как быть в этом случае? Делать специальное поле под текст новости для Яндекса?
Получаю ошибку валидации: в элементе item отсутствует атрибут turbo со значением true. Если в отладке добавить к item свойство turbo="true" - начинает работать в режиме отладки
Решил так: перенёс в папку с темой шаблон views-view-row-rss.html.twig из модуля View RSS. Т.к. на моём сайте нет других RSS и они не планируются, я изменил этот шаблон, добавив нужное свойство к Item, мой код:
<?php
<item turbo="true">
<title>{{ title }}</title>
<link>{{ link }}</link>
<description>{{ description }}</description>
{% for item in item_elements -%}
<{{ item.key }}{{ item.attributes -}}
{% if item.value -%}
{% if item.cdata -%}
><![CDATA[{{ item.value|raw }}]]></{{ item.key }}>
{% else -%}
{% if item.escaped -%}
>{{ item.value|raw }}</{{ item.key }}>
{% else -%}
{% if item.value is iterable %}
>{{ item.value|render }}</{{ item.key }}>
{% else -%}
>{{ item.value }}</{{ item.key }}>
{% endif %}
{% endif %}
{% endif %}
{% else -%}
{{ ' />' }}
{% endif %}
{%- endfor %}
</item>
?>
Чтобы этот шаблон заработал, в theme файле нужно добавить:
<?php
function THEME_NAME_theme_registry_alter(array &$registry) {
$theme_dir = \Drupal::service('extension.list.theme')->getPath('THEME_NAME');
$registry['views_view_row_rss']['path'] = $theme_dir . '/templates';
}
?>
Обратите внимание на "$theme_dir/templates" - у вас может быть другой путь, это нужно учитывать, например у меня путь выглядит так: "$theme_dir/templates/views"
Установил модуль.
Формат/показать RSS Feed - Fields
- отсутствует.Зато есть
Показать: Поля
В этих полях я не вижу ничего такого как тут на картинке
https://www.drupal.org/files/project-images/views_rss_yandex_item.png
Удалил вьюху и модуль. Решил установить его вновь. Версия 2.0.0.
Не получилось. Пишет:
Невозможно установить Views RSS: Yandex Elements, core.date_format.rfc_822 уже существует в активной конфигурации.
Впринципе модуль xmlfeedviews решает вопрос. Им и карту сайта можно и много чего еще.