Как я могу встроить представление в содержимое узла?
Как я могу встроить представление в содержимое узла в Drupal 8?
Я нашел нечто подобное, например, в вопросе о " Как встроить представление в узел?" или в модуле Поле просмотра, но это все для Drupal 7.
Я попытался использовать поле ссылки на сущность, указывающее на представление, но оно отображает только метку, и на вкладке "Управление отображением" я могу выбирать только из Метки и Идентификатора сущности. Мне нужно что-то вроде опция "Визуализированная сущность", которая присутствует в полях ссылок на сущности, указывающих на другие узлы.
4 answers
Вариант 1
Вы можете создать Блок просмотра . Затем блок просмотра будет доступен в разделе блоки. Назначьте блок просмотра региону и при необходимости покажите его на определенных страницах.
Вариант 2
Создайте файл шаблона ветки для своего узла и используйте
Щипок Веточки
Модуль Twig Tweak предоставляет расширение Twig с некоторыми полезными функциями и фильтрами, которые могут улучшить разработчика опыт.
Бывший:
<dd>{{ drupal_view('view_name', 'page_1') }}</dd>
Вариант 3
Если вы используете Панели или Набор дисплеев , вы можете встроить представление в виде поля.
Я помогаю поддерживать ветвь D8 EVA, которая функционально похожа на Twig Tweakdrupal_view()
, но работает как отображение представления, которое присоединяется к указанным пакетам сущностей в качестве дополнительного поля. Это означает, что Представление может быть переупорядочено в пользовательском интерфейсе управления отображением сущности или, например, удалено в группу полей . Как и функция Twig Tweak, она позволяет передавать контекстные фильтры в качестве аргументов.
Пример использования для EVA и для решения Twig Tweaks отличается от использования ссылки на сущность с помощью viewsreference, поскольку последняя позволяет редакторам контента выбирать разные представления для каждой сущности. EVA и drupal_view()
вводят одно и то же представление для каждой сущности (хотя контекстуальные аргументы могут изменить результаты представления).
Если вы создаете тему на заказ, у EVA может не быть никаких преимуществ по сравнению с внедрением блока twig, но если вы хотите разрешить сайтостроителям управлять представлением, как если бы это было поле сущности, и настраивать, где оно отображается с помощью пользовательского интерфейса, посмотрите.
Теперь также существует проект под названием viewsreference, который позволяет встраивать целые представления в узлы с помощью поля (подумайте о ссылке на сущность, но для полных представлений): https://www.drupal.org/project/viewsreference
Я только что использовал hook_entity_extra_field_info()
и views_embed_view()
для содержимого дополнительного поля.
**
* Implements hook_entity_extra_field_info().
*/
function MY_MODULE_entity_extra_field_info() {
$extra['node']['MY_CONTENT_TYPE'] = [
'display' => [
'MY_EXTRA_FIELD_NAME' => [
'label' => 'My Extra Field',
'description' => '',
'weight' => 10,
],
],
];
return $extra;
}
/**
* Implements hook_ENTITY_TYPE_view() for node.
*/
function MY_MODULE_node_view(array &$build, NodeInterface $node, EntityViewDisplayInterface $display, $view_mode) {
if ($node->bundle() === 'MY_CONTENT_TYPE') {
$build['MY_EXTRA_FIELD_NAME'] = [
'#type' => 'container',
'label' => ['#markup' => '<div class="label">My Extra Field:</div>'],
// At the following line embedding the view,
// and giving it an optional contextual filter $node->id()
'view' => views_embed_view('VIEW_NAME', 'DISPLAY_ID', $node->id()),
];
}
}