Ни одна статья не обойдётся без списка взаимосвязанных материалов. В 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']) {
533 просмотра
Взаимосвязанные материалы
Для замены стандартной иконки загрузки (Throbber) в Drupal 8 необходимо добавить следующий js код:
читать...Долго пришлось искать проблему не отображения файлов для которых созданы стили в Drupal 8. читать...
Если в последних версиях Drupal 8 появилась ошибка "Temporary file '*****.tmp' could not be created"
необходимо добавить в файл \sites\default\settings.php строку
читать...Несколько раз сталкивался с тем что последний элемент Breadcrumb кэшировался на страницах с типом "node", несмотря на то, что страница менялась. То же самое наблюдалось и с view.
читать...О том, как осуществить вывод информации с использованием ajax в Drupal 8. В Drupal 8 имеется несколько методов вывода информации через ajax - c применением методов Api и с использованием стандартных функций jQuery. При этом jQuery в Drupal 8 установлена по умолчанию. читать...