You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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或标签

方法2:自定义字段格式化器(适合有编码能力的场景)

如果不想依赖第三方模块,可以自己写一个简单的自定义模块来实现:

  1. 创建一个新模块(如view_renderer_formatter),包含基础的.info.yml文件
  2. 在模块文件中实现字段格式化器:
    <?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;
    }
    
  3. 安装模块后,回到字段管理页面,将字段的格式化器改为「Render View Entity」,配置显示ID即可

方法3:使用Paragraphs模块(适合复杂布局场景)

如果需要在内容中灵活插入视图并配合其他元素:

  • 安装并启用Paragraphs模块
  • 创建一个新的段落类型(如「嵌入视图」),添加一个视图引用字段(用方法1的Views Reference Field或自定义字段)
  • 给段落中的视图字段配置渲染格式化器
  • 在内容编辑器中添加该段落,选择对应的视图,保存后页面会渲染出完整的视图内容

内容的提问来源于stack exchange,提问作者Michele Smolensky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 20:55:28