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]
的视图方法
我创建了自定义包(内容类型)并创建了字段
其中一个字段是文件类型字段,是一个视频文件,存储在私有存储中。我安装了 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]