Ни одна статья не обойдётся без списка взаимосвязанных материалов. В Drupal 8 это сделать не очень просто, несмотря на наличие модуля представлений, поэтому я постараюсь объяснить это подробно и с изображениями.
Для начала зайдите в раздел представлений "/admin/structure/views":
Далее выберите создать новое представление или отредактируйте существующие.
Представление - это класс Drupal для универсальльного вывода информации из базы данных, основанных на различном содержимом. Его использование предназначено для быстрой настройки вывода различных данных, без использования знаний sql,php.
- Основные моменты на которых необходимо остановить внимание - это три пункта:
- 1. Подраздел "Контекстные фильтры";
- 2. Подраздел "Поля";
- 3. Подраздел "Критерии сортировки";
При этом самым важным является пункт номер один. В нем нужно указать связь "Контекстный фильтр: Редакция Термин таксономии: ID термина".
Обязательными элементами являются:
- 1. Загрузить фильтр по умолчанию со страницы термина;
- 2. Загрузить фильтр по умолчанию со страницы материала;
- 3. Ограничить термины словарем;
Контекстный фильтр: Термин таксономии: ID термина практически все делает для создания взаимоcвязаных материалов. Остальные два пункты подраздел "Поля, подраздел "Критерии сортировки", второстепенны. Они не представляют сложностей, поэтому Вы можете добавить нужные Вам значения самостоятельно. Я добавили пять полей:
- 1. Глобальный: Счетчик результатов (№)
- 2. Содержимое: Title
- 3. Содержимое: Время создания
- 4. Содержимое: Body
- 5. Содержимое: Ссылка на Содержимое
Данный набор оптимален для меня. Дополнительные поля не понадобились. В критериях сортировки указано "Содержимое: Время создания (убыв.)".
Сохраните указанные настройки, далее добавьте блок (/admin/structure/block/).
Конечным результатом будет вывод информации о взаимосвязанных материалах:

Шаблон вывода можно отредактировать в файле "views-view-fields--vzaimosvyazannye_materialy--block_1.html.twig"
Как вывести его в шаблоне.
Вроде бы все получилось. Однако осталось вывести блок в нужно месте. Для этого необходимо немного разобраться в коде основного шаблона [имя]theme.
/**
* Implements hook_preprocess_HOOK() for node.html.twig.
*/
function slyweb_preprocess_node(&$variables) {
if($variables['node']->bundle() == 'article' && !$variables['teaser']) {
$block = \Drupal\block\Entity\Block::load('views_block__vzaimosvyazannye_materialy_block_1');
$output = entity_view($block, 'block');
$variables['relation'] = drupal_render($output);
}
}
Теперь блок доступен в переменной $variables['relation'].
При этом, не забудьте, что данный блок необходим только на страницах статей:
if($variables['node']->bundle() == 'article' && !$variables['teaser']) {
58 просмотров
Взаимосвязанные материалы
Маленькая заметка по Drupal 8. Как получить изображение установленное по умолчанию:
читать...Часто требуется не только создать модуль с функциональностью на страницах сайта, но и предоставить возможность конфигурировать настройки модуля в администраторском разделе. читать...
Drupal 8 одна из популярнейших CMS в области создания сайтов. При этом для неё доступно огромное количество модулей, упрощающих жизнь как простому разработку, так и обычному пользователю.
читать...Ни одна статья не обойдётся без списка взаимосвязанных материалов.
читать...Не знаю как Вы, но я потратил несколько часов чтобы отключить кэширование страниц самописного модуля. читать...