Comment ajouter une variable à un modèle de champ de brindille?

9

Sur une page de noeud, je voudrais ajouter le titre du noeud à la sortie à côté d'un autre autre champ (le champ d'exemple).

J'ai créé une nouvelle field--field-example.html.twigmais je ne parviens pas à accéder à la variable de titre du nœud car elle n'est pas disponible dans le modèle de champ.

Je dois ajouter les variables dans le thème prétraiter: themename.theme.

Comment ajouter la variable dans themename.themeet quelle serait l'entrée correspondante dans le field--field-example.html.twig?

Taylor Taff
la source
Utilisez hook_preprocess_node pour extraire la valeur du champ que vous souhaitez utiliser dans le modèle.
@IvanJaros, j'ai mis à jour la question maintenant.
Taylor Taff

Réponses:

15

Puisque vous avez demandé de passer le titre du nœud en tant que variable via le fichier .theme, vous pouvez utiliser template_preprocess_field pour faire quelque chose comme ceci:

  function themename_preprocess_field(&$variables, $hook) {
    if ($variables['element']['#field_name'] == 'field_example') {
      $variables['node_title'] = $variables['element']['#object']->getTitle();
    }
  }

alors dans votre, field--field-example.html.twigvous pouvez simplement utiliser {{node_title}}pour rendre le titre du nœud.

Voir également la réponse de 4k4 ci-dessous.

Janey
la source
J'ai essayé de modifier votre réponse pour inclure celle fournie par 4k4 car elle est correcte mais ma modification a été refusée car elle a été jugée non pertinente ...
Taylor Taff
@TaylorTaff qui approuve les modifications? Je ne l'ai jamais vu. Tentera de modifier pour inclure la réponse ci-dessous.
Janey
@Janey, de nombreux utilisateurs avec suffisamment de badges peuvent consulter ces modifications. J'ai mis vos réponses en signet pour un examen ultérieur. Encore une question: êtes-vous sûrs que cela $variables['element']['#object']->getTitle();peut être capturé preprocess_field? Parce que cela répondrait à ma question ici: drupal.stackexchange.com/questions/197497/…
nilsun
11

Un objet nœud est disponible dans les variables du modèle de champ, vous n'avez donc pas besoin d'une fonction de prétraitement.

Pour obtenir le titre du nœud dans un modèle de champ:

{{ element['#object'].label }}
4k4
la source
Cela répond à la question, mais comme l'autre réponse de Janey sera plus utile, j'ai ajouté ceci à cette réponse et marqué comme accepté.
Taylor Taff
1
Mais votre question était sous la mauvaise hypothèse: "mais je ne peux pas accéder à la variable de titre de noeud car elle n'est pas disponible dans le modèle de champ."
4k4
Oui 4k4, vous avez raison, ma question était incorrecte.
Taylor Taff