如何在Drupal的Paragraph模板中显示Media library文件的media标签
Drupal Paragraph模板显示媒体分类标签解决方案
完全可以在Paragraph template中显示Media library中媒体资源关联的Taxonomy term分类标签,操作方法如下:
前置准备
先确认两个核心字段的机读名:
- Paragraph类型中引用媒体资源的字段机读名,下文示例以
field_paragraph_media代指 - Media实体上绑定的标签字段(关联分类术语的引用字段)机读名,下文示例以
field_media_tags代指
实际使用时请将示例中的字段名替换为你站点的实际配置。
实现方式1:预处理注入变量(符合Drupal开发规范)
将以下代码添加到你所用主题的根目录.theme文件中:
function 你的主题机读名_preprocess_paragraph__目标Paragraph类型机读名(&$variables) { $paragraph = $variables['elements']['#paragraph']; // 校验并获取Paragraph关联的媒体实体 if ($paragraph->hasField('field_paragraph_media') && !$paragraph->get('field_paragraph_media')->isEmpty()) { $media = $paragraph->get('field_paragraph_media')->entity; // 校验并获取媒体关联的分类标签 if ($media->hasField('field_media_tags') && !$media->get('field_media_tags')->isEmpty()) { $tags = []; foreach ($media->get('field_media_tags')->referencedEntities() as $term) { // 仅输出标签名 $tags[] = $term->label(); // 如需输出带跳转链接的标签,替换上一行代码为: // $tags[] = \Drupal\Core\Link::fromTextAndUrl($term->label(), $term->toUrl())->toString(); } $variables['media_tags'] = $tags; } } }
添加后清空Drupal缓存,就可以在对应的Paragraph模板中直接使用{{ media_tags }}变量输出标签列表。
实现方式2:直接在Twig模板中调用
无需修改PHP代码,直接在对应Paragraph的Twig模板(命名格式通常为paragraph--[Paragraph类型机读名].html.twig)的目标位置插入以下代码即可:
{% if paragraph.field_paragraph_media.entity.field_media_tags is not empty %} <div class="media-tags"> {% for tag_item in paragraph.field_paragraph_media.entity.field_media_tags %} {# 仅输出标签名 #} <span class="tag-item">{{ tag_item.entity.name.value }}</span> {# 如需输出带跳转链接的标签,替换上一行代码为: <span class="tag-item"><a href="{{ path('entity.taxonomy_term.canonical', {'taxonomy_term': tag_item.entity.id}) }}">{{ tag_item.entity.name.value }}</a></span> #} {% endfor %} </div> {% endif %}
注意事项
- 如果Paragraph的媒体引用字段支持多值,需要先遍历所有媒体实体,再分别输出每个媒体对应的标签
- 开启Twig调试模式后,可以通过
{{ dump(变量名) }}打印变量结构,确认字段层级是否和你站点的配置匹配 - 多语言站点需要先对分类术语做语言适配,再输出对应语言的标签名
内容的提问来源于stack exchange,提问作者ZEF
相关产品推荐
相关产品推荐

