Skip to main content
Темплейты для Drupal
Rss лента в Drupal 7

Rss лента с помощью Views

1. Создаем и настраиваем представление для формирования rss.

Это просто при созданни view добавляем вариант Feed.

Добавляем обязательные, для формирования фида: Title, Link, Description, Creator, Publication Date, GUID (глобальный уникальный ID для элемента RSS).

Для этих полей есть некоторые нюансы:

  • Content: Title (Title, Заголовок) - выводить можно и, пожалуй, даже нужно без ссылки на материал;
  • Content: Path (Link, Путь) - это должен быть именно путь материала, а не ссылка;
  • Content: Body (Description field, содержимое) - обрезаем на нужное количество знаков, либо выводим полный пост;
  • Content: Post date ( Publication Date, Дата публикации) - тут все просто и без нюансов;
  • User: Name (Creator, имя автора) - для получения этого поля нужно в блоке Advanced добавить Relationship (зависимость) "Content: Author";
  • GUID (уникальный ID) - в качестве уникального идентификатора можно использовать путь материала, можно задать какое-то свое поле, но оно должно быть уникальное для каждого поста, отправляющегося в RSS-ленту. По-моему, путь надежнее - он в любом случае уникальный для каждого поста.

Теперь нужно настроить привязку полей представления к полям фида.

 В появившемся окне выбираем для каждого пункта нужные поля, примерно так:

В блоке Feed Settings указываем путь, например, /rssfull. И сохраняем. Открываем фид в браузере... И видим, что ничего не работает. Opera наш фид обработать не может, feedburner не принимает, потому что XML не валидный. 

2. Исправляем невалидный XML для rss-ленты.

Для этого просто нужно переопределить шаблон вывода rss. В папке с темой создаем файлик views-view-rss.tpl.php

Код шаблона берем в блоке Advanced / Other. Пункт Theme: Information

Смотрим Style Output для шаблона views-view-rss.tpl.php (жирным шрифтом выделен тот файл который отвечает за вывод конкретного view.

.

Копируем код, показанный при клике на ссылку style output, вставляем в файл views-view-rss.tpl.php , созданный в папке вашей темы. Вставляем код и заменяем:

version="1.0" encoding="utf-8" "; ?> > на version="1.0" encoding="utf-8" "; ?> >

3. Дополняем RSS фид своими полями.

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

Здесь я столкнулась с некоторыми проблемами: дополнительные поля заполнены не везде. Поэтому, они для переопределения не подходят. Нам нужно поле, которое наверняка есть для каждого материала. Body - вариант хороший и правильный, но только в том случае, если в rss вы отдаете полный пост. У меня же "обрезанный" анонс. Соответственно, "обрезается" все содержимое этого поля. Мне такой вариант не подходил, поэтому было взято еще одно поле - Content: Nid, и в нем собраны все поля, которые должны присутствовать в содержимом поста в RSS-ленте.

Как переопределить вывод поля?

 

В настройках поля есть пункт Rewrite Results. Отмечаем checkbox "Rewritw the output of this field" и в поле Text прописываем все, что требуется. У меня получилось вот так:

В каком виде вставлять и какие поля доступны видно под формой в блоке "Replacement patterns".

Все, сохраняем, смотрим, что получилось. Скармливаем rss в feedburner и предлагаем пользователям подписаться.

4

Comments

Юрий's picture
Юрий

Доборый день! все сделано по Вашей инструкции, но выводится некорректная дата и время в ленте, отличная от даты создания ноды. Почему-то выводится дата на момент обновления ленты. В чем может быть проблема?

http://mytaganrog.com's picture
http://mytaganr...

Все сделано по Вашей инструкции. Однако дата в ленте выводится некорректно. Почему-то она совпадает временем обновления ленты, а не создания самой ноды. В чем может быть проблема?

Мария Шерскова's picture
Мария Шерскова

Проверьте, может быть вы случайно вместо post date добавили поле last update date?
 

VitaliyDemchuk's picture
VitaliyDemchuk

А на что заменяем? Не могу понять...
"Вставляем код и заменяем:
version="1.0" encoding="utf-8"
"; ?> > на
version="1.0" encoding="utf-8"
"; ?> >"