Пятница, вечер, так и хочется какой-нибудь релиз выкатить. Но старческая мудрость и вековой опыт напоминают, что в пятницу релизы выкатывать не стоит.
Раз нельзя что-нибудь запилить на работе, пилим дома. Сделаю то, что давно откладывал на потом. Подключаю и настраиваю блок "Похожие статьи". Идея в том, чтобы для статей отображать похожие статьи, книги и игры. Для книг — похожие книги, статьи и тоже игры. Для игр — всё что на них похоже. Придумывать ничего не будем, воспользуемся модулем Similar By Terms. Он позволяет получать похожие материалы, на основе терминов таксономии, которые к ним привязаны.
https://www.drupal.org/project/similarterms
Перед тем как писать эту статью, я попробовал накатить этот модуль. Сначала ничего не получилось, а потом до меня начало доходить, что проблема не в модуле, а в описании к модулю. Все статьи не совсем верно выдают информацию, поэтому нужно пройти путь самому, вместе с вами. Сам пока не знаю что получится. Итак, устанавливаем модуль Similar By Terms. И включаем его. Я ставлю версию 8.x-1.5.
Создаём новое представление, /admin/structure/views/add.
Указываем имя представления, назову его "Похожие материалы". В настройках представления выбираю показывать Материал всех типов без сортировки. Страницу создавать не буду, только блок. Блок называю "Похожие материалы", формат отображение пока не применяю никакой: неформатированный список из заголовков. Хочется пока чтобы просто заработало, красоту потом наведём. Сохранить и редактировать.
ПОЛЯ → Добавить.
Категория: выбираю из списка Similar by terms. Доступно только одно поле — Similarity, выделяю галкой. Добавить и настроить поля.
Данное поле с настройками по умолчанию выводит процент "похожести" материалов на нашу статью. Мне это поле потом не понадобится, но с ним нагляднее. Применить.
КРИТЕРИЙ ФИЛЬТРАЦИИ → Добавить.
Добавляю тип материала. Добавить и настроить критерий фильтрации.
Указываю галками типы материалов, которые будут отображаться в блоке похожих материалов. У меня это:
- DOS игра
- Книга
- Статья
Другие мне не нужны. Применить.
КРИТЕРИЙ СОРТИРОВКИ → Добавить.
Категория: выбираю из списка Similar by terms. Доступно только одно поле — Similarity, выделяю галкой. Добавить и настроить критерий сортировки.
Сортировать будем по убыванию. Соответственно, в вывод будут попадать материалы с самым большим процентом "похожести", что нам и нужно. Применить.
Разворачиваем правый блок РАСШИРЕННЫЕ. КОНТЕКСТНЫЕ ФИЛЬТРЫ → Добавить.
Категория: выбираю из списка Similar by terms. Доступно только одно поле — Nid, выделяю галкой. Добавить и настроить контекстные фильтры.
Когда значение фильтра недоступно — передаём значение по умолчанию. А оно по какой-то причине в Drupal 9 недоступно, хотя разработчики пишут другое. Указываем "Передать значение по умолчанию", тип "ID материала из URL". Можно выделить галками термины таксономии, которые будут участвовать в фильтре, у меня это:
- Авторы
- Категории игр
- Лицензия
- Теги
Но если участвуют все словари, то рекомендуется их не указывать. Можно ещё промотать вниз в раздел ЕЩЁ и выбрать значение Исключить (если выбрано, введенные в фильтр числа будут исключаться, а не ограничивать представление). Применить.
РАСШИРЕННЫЕ → Использовать агрегацию: Да.
Мотаю вниз до раздела Предпросмотр, указываю в поле "Предпросмотр с контекстными фильтрами" идентификатор любой статьи, у которой есть тег Linux. Обновить предпросмотр.
Вывелись материалы на тему Linux, похоже на правду. Попробуем статью с тегом Windows.
Вывелись материалы на тему Windows, очень хорошо. Попробуем указать идентификатор игры Quake.
То что доктор прописал!
А теперь переделываем представление на свой вкус и цвет. Структура → Схема блоков → Расположить блок. Располагаю блок в материале, чтобы вывести его под статьёй.
Находим наш блок и размещаем его. Разместить блок.
Указываю типы материалов, для которых отображать блок. Сохранить блок.
Результат
Проверим что получилось. В статьях под блоком комментариев:
В игре:
В книге: