Comment ajouter une variable pour un modèle Twig dans ma fonction de prétraitement?

10

J'utilise le code suivant pour prétraiter les variables de mon modèle:

function template_preprocess_imagegallery_format(&$vars) {
  template_preprocess_image_formatter($vars);
  $vars['image']['#theme'] = 'igimage';
  $vars['image']['#thumbnail'] = ImageStyle::load('thumbnail')->buildUrl($vars ['image']['#uri']);
  $vars['image']['#fullimage'] = file_create_url($vars ['image']['#uri']);
}

La variable #uri est déjà présente, et si je la modifie, tout fonctionne bien. Mais je dois ajouter des variables supplémentaires ici car j'ai besoin de deux styles différents de la même image. Mais simplement ajouter ces variables au tableau ne fonctionne pas.

Si je vide les variables disponibles dans mon modèle Twig avec {{ dump(_context|keys) }}, je ne vois pas les variables que j'ai ajoutées là-bas. Si j'essaie de les utiliser dans mon modèle, rien n'est inséré.

Je peux voir que les valeurs sont ajoutées au tableau, lorsque je vide la variable d'image dans le thème qui rend le champ entier, je vois mes variables dans le tableau. Mais ils ne sont toujours pas disponibles dans le modèle qui rend la variable d'image elle-même.

Que dois-je faire d'autre pour ajouter une variable dans ma fonction de prétraitement que je peux utiliser dans mon modèle Twig?

Scientifique fou
la source
Vous avez un espace entre le nom du tableau $varset vos clés (par exemple ['image']). Je suis presque sûr que ce n'est pas permis.
othermachines
J'ai supprimé les espaces, cela n'a pas vraiment d'importance et j'ai le même résultat avec ou sans espaces. Les espaces sont du code que j'ai copié d'un exemple.
Mad Scientist
Avez-vous renommé la fonction? Ce ne devrait pas être le cas, template_preprocess_imagegallery_formatmais le «modèle» devrait être remplacé par le nom de votre thème ou module. Vous aurez également besoin d'un cache vide.
othermachines

Réponses:

8

J'ai finalement résolu le problème, il s'avère que le problème était que j'ai essayé d'ajouter les variables dans le mauvais préprocesseur. La modification du #theme fonctionne là-bas, mais pour ajouter des variables, j'avais besoin de prétraiter le thème que j'ai défini ici:

function template_preprocess_imagegallery_format(&$vars) {
  template_preprocess_image_formatter($vars);
  $vars['image']['#theme'] = 'igimage';
}

function template_preprocess_igimage(&$vars) {
    $vars['thumbnail'] = ImageStyle::load('thumbnail')->buildUrl($vars['uri']);
    $vars['fullimage'] = file_create_url($vars['uri']);
}
Scientifique fou
la source
4

Nom du thème: atvdirect

  • créer un fichier atvdirect.theme à la racine de votre thème, à part atvdirect.info.yml
  • ajouter le code ci-dessous dans le fichier atvdirect.theme
  • utilisez {{logopath}} dans page.html.twig

    <?php
    function atvdirect_preprocess_page(&$variables) {
      $variables['logopath'] = '/'.drupal_get_path('theme','atvdirect') .'/logo.png';
    }
    ?>
gurcharan
la source
1
Merci d'avoir finalement dit dans quel fichier cela devrait être placé.
Ryan H
Excellente réponse, bien expliquée.
Élève