我希望使用在字段中设置的分类术语值来增强页面标题。
所以标题看起来像这样:
要修改标题,我覆盖了
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'] }}
对我而言,这似乎就像很多工作一样,所以我们非常感谢更直接的方法。
答案 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 }}