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?
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']);
}
Nom du thème: atvdirect
utilisez {{logopath}} dans page.html.twig
<?php
function atvdirect_preprocess_page(&$variables) {
$variables['logopath'] = '/'.drupal_get_path('theme','atvdirect') .'/logo.png';
}
?>