2017-08-11 107 views
0

让我说我有一个分类名称风味和条款有香草,巧克力和绿茶。Drupal 8:列表树枝中活动类的分类术语

我也有一个内容类型名称冰淇淋风味字段下的'风味'分类可以多选。

我创建了一个冰淇淋页面名称Baskin Robin,并在风味字段下勾选了“香草”和“巧克力”。

如何列出node.html.twig中的所有'Flavor'字词并添加'Vanilla'和'Chocolate'类?

例如:

<div class="field-item active">Vanilla</div> 
<div class="field-item active">Chocolate</div> 
<div class="field-item">Green Tea</div> 

回答

0

你需要一个意见做到这一点。 您也可以使用hook_preprocess_node将所有口味注入冰淇淋模板中。

我将解释最简单&最快的,但最脏的一个,以实现自己的目标 - 使用hook_preprocess_node

我推荐使用自定义块或视图的可伸缩性&可维护性。下面的代码是一个工作示例,您可以在自定义块中使用它。


这里的代码使用预处理的方式。

在你template.theme文件:

/** 
* Implements hook_preprocess_node. 
*/ 
function template_preprocess_node(&$variables) { 
    $node = $variables['node']; 

    if($node->bundle() == 'ice-cream') { 
    // Should be injected. 
    $termStorage = \Drupal::entityManager()->getStorage('taxonomy_term'); 

    // Load all flavors taxonomy term. 
    $variables['flavors'] = $termStorage->loadTree('flavors', 0, NULL, TRUE); 
    } 
} 

在你node.html.twignode--ice-cream.html.twig

{% for flavor in flavors %} 
    {% set classes = ['field-item'] %} 
    {% for node_flavor in node.field_flavors if node_flavor.target_id == flavor.id %} 
    {% set classes = classes|merge(['active'])%} 
    {% endfor %} 

    <div class="{{ classes|join(' ') }}">{{ flavor.name.value }</div> 
{% endfor %} 

希望它会帮助你的!