Drupal 9:如何在内容类型中渲染视图为实体而非标签/ID?
解决方案
方法1:使用Views Reference Field模块(无需编码)
这是最简便的方案,该模块专门为引用并渲染视图设计:
- 安装并启用
Views Reference Field模块 - 创建/编辑你的字段,选择字段类型为Views reference
- 在字段的「显示设置」中,将格式化器改为Render view
- 配置格式化器的选项:
- 选择要使用的视图显示ID(如
default、page_1) - 勾选「Pass current entity ID as argument」,就能把当前内容页的实体ID传给视图,实现数据关联
- 选择要使用的视图显示ID(如
- 保存配置后,内容编辑器中选择的视图就会直接渲染为完整的视图内容,而非ID或标签
方法2:自定义字段格式化器(适合有编码能力的场景)
如果不想依赖第三方模块,可以自己写一个简单的自定义模块来实现:
- 创建一个新模块(如
view_renderer_formatter),包含基础的.info.yml文件 - 在模块文件中实现字段格式化器:
<?php /** * Implements hook_field_formatter_info(). */ function view_renderer_formatter_field_formatter_info() { return [ 'view_renderer' => [ 'label' => t('Render View Entity'), 'field types' => ['entity_reference'], 'settings' => ['display_id' => 'default'], ], ]; } /** * Implements hook_field_formatter_settings_form(). */ function view_renderer_formatter_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) { $settings = $instance['display'][$view_mode]['settings']; $element['display_id'] = [ '#type' => 'textfield', '#title' => t('View Display ID'), '#default_value' => $settings['display_id'], '#description' => t('输入要渲染的视图显示ID,例如default、page_1'), ]; return $element; } /** * Implements hook_field_formatter_view(). */ function view_renderer_formatter_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) { $element = []; $display_id = $display['settings']['display_id'] ?? 'default'; foreach ($items as $delta => $item) { if ($view = \Drupal\views\Entity\View::load($item['target_id'])) { if ($view->getDisplay($display_id)) { // 将当前内容ID作为参数传给视图,实现数据关联 $element[$delta] = views_embed_view($view->id(), $display_id, $entity->id()); } } } return $element; } - 安装模块后,回到字段管理页面,将字段的格式化器改为「Render View Entity」,配置显示ID即可
方法3:使用Paragraphs模块(适合复杂布局场景)
如果需要在内容中灵活插入视图并配合其他元素:
- 安装并启用
Paragraphs模块 - 创建一个新的段落类型(如「嵌入视图」),添加一个视图引用字段(用方法1的Views Reference Field或自定义字段)
- 给段落中的视图字段配置渲染格式化器
- 在内容编辑器中添加该段落,选择对应的视图,保存后页面会渲染出完整的视图内容
内容的提问来源于stack exchange,提问作者Michele Smolensky
相关产品推荐
相关产品推荐

