web-dev-qa-db-ja.com

mytheme_preprocess_fieldを使用して変数を追加し、twigテンプレートを使用して印刷する方法

_field_header_と_field_link_の2つのカスタムフィールドを持つコンテンツタイプArticleがあります。 _field_header_が設定されていない場合、twigテンプレートで検証を実行してCSSクラスを追加します。_$variables['myVariable'] = TRUE_を使用してカスタム変数を設定しようとしたときに、 twigテンプレートの値を出力します。これはNULL値を返します。

mytheme_preprocess_field()フックを使用してカスタム変数を作成し、twigテンプレートで使用するにはどうすればよいですか?

mytheme.theme

_function mytheme_preprocess_field(&$variables) {
  $element = $variables['element'];
  if($element['#field_name'] == 'field_header') {
    if($element['#items']->first()->isEmpty()) {
      $variables['myVariable'] = TRUE;
    }
  }
}
_

node--article.html.twig

_<div>
  {{ kint(myVariable) }} // Returns NULL everytime.

  {% if myVariable %}
    // If not empty, do something.
  {% else %}
    // If empty, do something else. 
  {% endif %}
</div>
_
3
usernameabc

テンプレート内の変数にはスコープが設定されています-hook_preprocess_fieldに追加したものはfield.html.twigとその派生物でのみ使用でき、node.html.twigでは使用できません等.

ノードの前処理に同じロジックを実装できます。

function mytheme_preprocess_node(&$variables) {
  if ($variables['node']->hasField('field_header') && $variables['node']->field_header->isEmpty()) {
    $variables['myVariable'] = TRUE;
  }
}
3
Clive