¿Cómo agrego una variable para una plantilla Twig en mi función de preproceso?

10

Estoy usando el siguiente código para preprocesar las variables para mi plantilla:

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 ya está presente, y si solo la modifico, todo funciona bien. Pero necesito agregar variables adicionales aquí ya que necesito dos estilos diferentes de la misma imagen. Pero simplemente agregar esas variables a la matriz no funciona.

Si vuelco las variables disponibles en mi plantilla Twig con {{ dump(_context|keys) }}, no veo las variables que agregué allí. Si trato de usarlos en mi plantilla, no se inserta nada.

Puedo ver que los valores se agregan a la matriz, cuando vuelco la variable de imagen en el tema que representa todo el campo, veo mis variables en la matriz. Pero todavía no están disponibles en la plantilla que representa la variable de imagen en sí.

¿Qué más necesito hacer para agregar una variable en mi función de preproceso que pueda usar en mi plantilla Twig?

Científico loco
fuente
Tiene un espacio entre el nombre de la matriz $varsy sus claves (por ejemplo ['image']). Estoy bastante seguro de que no está permitido.
othermachines
Eliminé los espacios, en realidad no importa y tengo el mismo resultado con o sin espacios. Los espacios son del código que copié de un ejemplo.
Científico loco
¿Cambiaste el nombre de la función? No debería serlo, template_preprocess_imagegallery_formatpero 'plantilla' debe reemplazarse con el tema o el nombre del módulo. También necesitarás un caché claro.
othermachines

Respuestas:

8

Finalmente resolví el problema, el problema fue que intenté agregar las variables en el preprocesador incorrecto. Editar el #theme funciona allí, pero para agregar variables necesitaba preprocesar el tema que configuré allí:

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']);
}
Científico loco
fuente
4

Nombre del tema: atvdirect

  • cree un archivo atvdirect.theme en la raíz de su tema, aparte atvdirect.info.yml
  • agregue el siguiente código en el archivo atvdirect.theme
  • use {{logopath}} en page.html.twig

    <?php
    function atvdirect_preprocess_page(&$variables) {
      $variables['logopath'] = '/'.drupal_get_path('theme','atvdirect') .'/logo.png';
    }
    ?>
gurcharan
fuente
1
Gracias por decir finalmente en qué archivo se debe colocar esto.
Ryan H
Excelente respuesta, bien explicada.
Alumno