Созадние списка взаимосвязанных материалов (related post, content)

Опубликовано admin - вт, 09/24/2019 - 20:00

Ни одна статья не обойдётся без списка взаимосвязанных материалов. В Drupal 8 это сделать не очень просто, несмотря на наличие модуля представлений, поэтому я постараюсь объяснить это подробно и с изображениями.

Для начала зайдите в раздел представлений "/admin/structure/views":

Взаимосвязанные материалы в Drupal 8

Далее выберите создать новое представление или отредактируйте существующие.

Представление - это класс Drupal для универсальльного вывода информации из базы данных, основанных на различном содержимом. Его использование предназначено для быстрой настройки вывода различных данных, без использования знаний sql,php.


 

взаимсовязанные материалы

  • Основные моменты на которых необходимо остановить внимание - это три пункта:
  • 1. Подраздел "Контекстные фильтры";
  • 2. Подраздел "Поля";
  • 3. Подраздел "Критерии сортировки";
 

При этом самым важным является пункт номер один. В нем нужно указать связь "Контекстный фильтр: Редакция Термин таксономии: ID термина".

Drupal 8 интерестно  Обязательными элементами являются:

  • 1. Загрузить фильтр по умолчанию со страницы термина;
  • 2. Загрузить фильтр по умолчанию со страницы материала;
  • 3. Ограничить термины словарем;
 

Контекстный фильтр: Термин таксономии: ID термина практически все делает для создания взаимоcвязаных материалов. Остальные два пункты подраздел "Поля, подраздел "Критерии сортировки", второстепенны. Они не представляют сложностей, поэтому Вы можете добавить нужные Вам значения самостоятельно. Я добавили пять полей:

  • 1. Глобальный: Счетчик результатов (№)
  • 2. Содержимое: Title
  • 3. Содержимое: Время создания
  • 4. Содержимое: Body
  • 5. Содержимое: Ссылка на Содержимое

Данный набор оптимален для меня. Дополнительные поля не понадобились. В критериях сортировки указано "Содержимое: Время создания (убыв.)".

Сохраните указанные настройки,  далее добавьте блок (/admin/structure/block/).

Взаимосвязанные материалы в Drupal 8

 

Конечным результатом будет вывод информации о взаимосвязанных материалах:

результат

Шаблон вывода можно отредактировать в файле "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']) { 

 

Взаимосвязанные материалы

# 1. О том как заменить стандартную иконку (Throbber) в Drupal 8 (понедельник, ноября 9, 2020 - 23:23 ),

Для замены стандартной иконки загрузки (Throbber) в Drupal 8 необходимо добавить следующий js код:

читать...
# 2. SetHandler none Drupal_Security...... (вторник, октября 6, 2020 - 23:26 ),
Долго пришлось искать проблему не отображения файлов для которых созданы стили в Drupal 8. читать...
# 3. Temporary file '*****.tmp' could not be created (суббота, сентября 26, 2020 - 19:37 ),

Если в последних версиях Drupal 8 появилась ошибка "Temporary file '*****.tmp' could not be created"

необходимо добавить в  файл \sites\default\settings.php  строку

читать...
# 4. Как правильно кэшировать хлебные крошки в Drupal 8 (среда, января 29, 2020 - 14:12 ),

Несколько раз сталкивался с тем что последний элемент Breadcrumb кэшировался на страницах с типом "node", несмотря на то, что страница менялась. То же самое наблюдалось и с view. читать...

# 5. Drupal 8. Несколько способов вывода информации черех Ajax (понедельник, января 27, 2020 - 23:23 ),
О том, как осуществить вывод информации с использованием ajax в Drupal 8. В Drupal 8 имеется несколько методов вывода информации через ajax - c применением методов Api и с использованием стандартных функций jQuery. При этом jQuery в Drupal 8 установлена по умолчанию. читать...
На разработку сайта! Скидки до 20%!