Como adiciono uma variável para um modelo Twig na minha função de pré-processo?


10

Estou usando o seguinte código para pré-processar as variáveis ​​para o meu modelo:

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

A variável #uri já está presente e, se eu apenas modificá-la, tudo funciona bem. Mas preciso adicionar variáveis ​​adicionais aqui, pois preciso de dois estilos diferentes da mesma imagem. Mas simplesmente adicionar essas variáveis ​​à matriz não funciona.

Se eu despejar as variáveis ​​disponíveis no meu modelo Twig {{ dump(_context|keys) }}, não vejo as variáveis ​​adicionadas lá. Se eu tentar usá-los no meu modelo, nada será inserido.

Percebo que os valores são adicionados à matriz. Quando despejo a variável de imagem no tema que renderiza todo o campo, vejo minhas variáveis ​​na matriz. Mas eles ainda não estão disponíveis no modelo que renderiza a própria variável de imagem.

O que mais eu preciso fazer para adicionar uma variável na minha função de pré-processo que eu possa usar no meu modelo Twig?


Você tem um espaço entre o nome da matriz $varse suas chaves (por exemplo ['image']). Tenho certeza de que isso não é permitido.
othermachines

Eu removi os espaços, isso realmente não importa e tenho o mesmo resultado com ou sem espaços. Os espaços são do código que eu copiei de um exemplo.
Cientista Louco

Você renomeou a função? Não deve ser, template_preprocess_imagegallery_formatmas 'modelo' deve ser substituído pelo seu tema ou nome do módulo. Você também precisará de um cache limpo.
othermachines

Respostas:


8

Finalmente resolvi o problema, o problema foi que tentei adicionar as variáveis ​​no pré-processador errado. A edição do #theme funciona lá, mas para adicionar variáveis, eu precisava pré-processar o tema definido aqui:

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

4

Nome do tema: atvdirect

  • crie um arquivo atvdirect.theme na raiz do seu tema, além de atvdirect.info.yml
  • adicione o código abaixo no arquivo atvdirect.theme
  • use {{logopath}} em page.html.twig

    <?php
    function atvdirect_preprocess_page(&$variables) {
      $variables['logopath'] = '/'.drupal_get_path('theme','atvdirect') .'/logo.png';
    }
    ?>
    

11
Obrigado por finalmente dizer que arquivo este deve ser colocado em.
Ryan H

Excelente resposta, bem explicada.
Aluno
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.