Часто возникает необходимость добавить в конец статьи блок с теми статьями, которые пользователь уже посмотрел. Это неотъемлемый элемент блога или новостного сайта.
Когда я столкнулся с этой проблемой, думал без мудрежа не обойдется, но, как оказалось, все просто :)
Как сделать блок с последними просмотренными материалами?
Согласитесь, приятно, когда до вас уже кто-то решил проблему. Поэтому используем модуль Recently Read.
1. Ставим через админку или через Composer командой:
composer require drupal/recently_read
2. Включаем через админку или drush:
drush pm-enable recently_read
3. Переходим в настройки модуля Конфигурация - Система - Recently read config. Выбираем тип сущности для которой хотим активировать недавний просмотр.
Например: Node.
4. Затем во вкладке "Конфигурация" отмечаем, как будет удалятся/обновляться информация в списке недавно посещенных страниц.
- Time based - через определенное время;
- Count based - с просмотров новых страниц, старые из списка будут исчезать;
- Никогда - не будет удалятся никогда.
Указываем Max record (количество записей в списке) и сохраняем.
Как вывести блок с последними просмотренными материалами?
5. Выводить блок с недавно просмотренными материалами будем через представление. Создаем представление Content.
6. Сохраняем выбранным набором чуть ранее в п.3. Название наборов - машинные имена типов сущности. В моем случае - это "Статья".
7. Далее, в критериях сортировки добавляем "Created" из категорией "Recently read". Сортируем по убыванию.
Готово! Сохраняем представление. Размещаем в желаемом регионе.
Я вывел контент в колонки: col-xs-12 col-sm-6 col-md-4, добавил поля изображения и заголовка и вот что получилось в сыром виде:
Исключаем текущую страницу
8. Теперь нужно сделать так, чтобы при посещении страницы из отображения исключалась страница на которой находится пользователь. Это важно когда вы размещаете блок, например, на страницах новостей выводя последние просмотренные новости. Если блок располагается где-то на страницах других типов материалов, то, пожалуй, в исключении нет необходимости.
Добавим контекстный фильтр по ID сущности (в нашем случае, ноды) и передадим ему значение по умолчанию из URL. Не забудем поставить галку внизу фильтра, именно она отвечает за исключение текущей ноды из контектста.
На этом все!
Если у вас все получилось и вы хотите сказать спасибо, пишите комментарии и ставьте лайк! Обязательно делитесь статей в соцсетях со своими единомышленниками.