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?

Cientista maluco
fonte
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']);
}
Cientista maluco
fonte
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';
    }
    ?>
    
gurcharan
fonte
11
Obrigado por finalmente dizer que arquivo este deve ser colocado em.
Ryan H
Excelente resposta, bem explicada.
Aluno