Twig Drupal 8细枝分类术语

Twig Drupal 8细枝分类术语,twig,drupal-8,Twig,Drupal 8,我想用字段中设置的分类术语值来增强页面的标题 因此,标题如下所示: 标题-[分类术语值] 要修改标题,我重写了 field--node--title--[content-type].html.twig 到目前为止,通过element对象请求对节点本身和其他字段的访问: element['#object'].get('field_my_field').get(0) 获取第一个元素 element['#object'].get('field_my_field').get(0)['target_i

我想用字段中设置的分类术语值来增强页面的标题

因此,标题如下所示:

标题-[分类术语值] 要修改标题,我重写了

field--node--title--[content-type].html.twig
到目前为止,通过element对象请求对节点本身和其他字段的访问:

element['#object'].get('field_my_field').get(0)
获取第一个元素

element['#object'].get('field_my_field').get(0)['target_id']
返回分类术语的tid。但是

element['#object'].get('field_my_field').get(0)['name']
返回一个空元素

element['#object'].get('field_my_field').get(0)['target_id']
如何检索字段值?我无法想象这需要php代码

更新: 我想出了一个办法,但似乎有点复杂:

由于分类术语没有在#对象中解析,因此我必须添加一个hook#u preprocess:field函数来准备一个包含必要数据的变量:

function myTheme_preprocess_field(&$variables, $hook){
  if ($variables['field_name'] == 'title'){
    $variables['my_field'] = Term::load($variables['element']['#object']->get('my_field')->get(0)->getValue()['target_id']);
}
现在可以在twig中访问该字段,如下所示:

{{ my_field.name.getValue()[0]['value'] }}

对我来说,这似乎需要做很多工作,因此更直接的方法是非常值得赞赏的。

对我来说,看起来你需要为页面标题.html.twig模板设置一个合适的页面后缀,该模板由你的自定义模块填充。

这应该会起作用

{{ my_field.name.value }}
编辑:

根据代码所在的模板,访问术语(或任何字段)名称的方式会发生变化

如果您在段落模板中,您将使用:

{{ paragraph.field_my_taxonomy.name.value }}
如果您在节点模板中:

{{ node.field_my_taxonomy.name.value }}

在Drupal 8中,如果您只有术语的TID,则contrib模块应允许您通过以下操作获取术语名称:

{{ drupal_field('name', 'taxonomy_term', tid) }}

在节点模板中对我有效的是:

{{ node.field_name.entity.name.value }}

除了代码从预处理转移到页面后缀之外,这与我在更新部分中提出的解决方案有何不同?您的解决方案可以工作,而我的解决方案更接近Drupal主题设计。