Drupal 8分类术语在树枝上

时间:2016-02-20 11:59:06

标签: twig drupal-8

我希望使用在字段中设置的分类术语值来增强页面标题。

所以标题看起来像这样:

标题 - [taxonomy-term-value]

要修改标题,我覆盖了

field--node--title--[content-type].html.twig

到目前为止,通过元素对象请求访问节点本身和其他字段:

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']

返回一个空元素。

如何检索字段值?我无法想象这应该需要php代码。

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

由于在#object中没有解析分类术语,我必须添加一个hook_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']);
}

现在可以在树枝中访问该字段,如下所示:

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

对我而言,这似乎就像很多工作一样,所以我们非常感谢更直接的方法。

4 个答案:

答案 0 :(得分:1)

对我来说,您需要为自定义模块填充的 page-title.html.twig 模板设置正确的page_suffix

答案 1 :(得分:1)

这应该有效!

{{ my_field.name.value }}

编辑:

您访问术语(或任何字段)名称的方式会根据您的代码所在的模板而有所变化。

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

{{ paragraph.field_my_taxonomy.name.value }}

如果您在节点模板中:

{{ node.field_my_taxonomy.name.value }}

答案 2 :(得分:1)

在Drupal 8中,如果您仅具有术语的TID,则contrib模块Twig Tweak应该让您通过执行以下操作来获得术语名称:

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

答案 3 :(得分:0)

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

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