drupal 8 show field 两次

drupal 8 show field twice

我创建了自定义包(内容类型)并创建了字段

其中一个字段是文件类型字段,是一个视频文件,存储在私有存储中。我安装了 videojs module 以允许观看视频。

我需要在节点页面中显示该字段两次。通用文件格式化程序中的一个,允许用户下载文件,我还需要播放视频。我决定设置为通用文件格式化程序并自定义 twig 模板以再次与视频播放器一起显示。

我在节点--mybundle--full.html.twig模板

中使用设置格式化程序(通用文件)和这段代码实现了显示两次
{{ content.field_sd_video }}

我认为它会像 field+formatter 这样简单:

{{ content.field_sd_video|videojs_formatter }}

但我找不到实现此目的的简单方法。可能需要更棘手的方法吗?

我终于找到了解决方案,我把这段代码放在预处理节点函数中。它必须很容易,但知道怎么做并不容易 ;)

function mytheme_preprocess_node(&$variables) {

     $variables['video_caption'] = $variables['node']->get('field_video')
         ->view(array(
            'label' => 'hidden',
            'type' => 'videojs_player_list'
        ));
}

我只需要在 twig 文件中添加这一行:

{{ video_caption }}

在我的例子中 node--mybundle--full.html.twig 模板

对于那些来到这里寻找类似东西的人 我的灵感来自第 41 页的 Twig Recipes
它对我很有用 Twig debugging。使用 kint 和 node 变量以及用于包装信息的 类 。然后我发现该字段带有 [FileFieldItemList] 然后我找到了使用 [EntityViewBuilderInterface]

的视图方法