2017-08-11 5 views
0

私はタクソノミの名前フレーバーを持っており、用語にはバニラ、チョコレート、緑茶があります。Drupal 8:枝にアクティブなクラスのタクソノミーの用語を列挙してください。

「Flavor」分類の下にフレーバーフィールドを持つコンテンツタイプ名アイスクリームもあります。これは複数選択できます。

私はアイスクリームのページ名Baskin Robinを作成し、フレーバーフィールドの下で「Vanilla」と「Chocolate」をチェックします。

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を使用して、アイスクリームのテンプレートにすべての味を注入することもできます。

私はあなたの目標を達成するために、最も簡単&最速、ほとんどの汚いものを説明します。

スケーラビリティのためにカスタムブロックまたはビューを使用することをお勧めします&メンテナンス性。以下のコードは実際の例です。カスタムブロックで使用することができます。


ここでは、コードは前処理方法を使用しています。あなたのnode.html.twigまたはnode--ice-cream.html.twig

/** 
* 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); 
    } 
} 

:あなたのtemplate.themeファイルで

{% 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 %} 

は、それはあなたを助けることを願っています!

関連する問題