web-dev-qa-db-fra.com

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

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 sauvegarde 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'essaye de les utiliser dans mon modèle, rien 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?

10
Mad Scientist

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. L'édition du #theme fonctionne là-bas, mais pour ajouter des variables, j'avais besoin de prétraiter le thème que j'ai défini là-bas:

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']);
}
8
Mad Scientist

Nom du thème: atvdirect

  • créez 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';
    }
    ?>
    
4
gurcharan