web-dev-qa-db-fra.com

Comment ajouter une variable en utilisant mytheme_preprocess_field et imprimer en utilisant le modèle twig?

Nous avons un article de type de contenu qui a deux champs personnalisés: field_header Et field_link. Lorsque field_header N'est pas renseigné, nous voulons effectuer la validation dans le modèle twig pour ajouter une classe CSS. Lorsque nous avons essayé de définir une variable personnalisée à l'aide de $variables['myVariable'] = TRUE Et essayez d'imprimer la valeur dans le modèle twig, il renvoie une valeur NULL.

Comment puis-je créer une variable personnalisée en utilisant le crochet mytheme_preprocess_field() et l'utiliser dans le modèle 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;
    }
  }
}

noeud - 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

Les variables d'un modèle ont une portée - ce que vous ajoutez dans hook_preprocess_field ne sera disponible que dans field.html.twig et ses dérivés, pas node.html.twig etc.

Vous pouvez implémenter la même logique dans le pré-processus de nœud:

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