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>
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;
}
}