Come posso aggiungere una variabile per un modello Twig nella mia funzione di preelaborazione?


10

Sto usando il seguente codice per preelaborare le variabili per il mio modello:

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 variabile #uri è già presente e, se la modifico, tutto funziona bene. Ma devo aggiungere ulteriori variabili qui poiché ho bisogno di due stili diversi della stessa immagine. Ma semplicemente l'aggiunta di tali variabili all'array non funziona.

Se dump delle variabili disponibili nel mio modello Twig con {{ dump(_context|keys) }}, non vedo le variabili che ho aggiunto lì. Se provo a usarli nel mio modello, non viene inserito nulla.

Vedo che i valori vengono aggiunti all'array, quando eseguo il dump della variabile immagine nel tema che esegue il rendering dell'intero campo, vedo le mie variabili nell'array. Ma non sono ancora disponibili nel modello che esegue il rendering della variabile immagine stessa.

Cos'altro devo fare per aggiungere una variabile nella mia funzione di preelaborazione che posso usare nel mio modello Twig?


C'è uno spazio tra il nome dell'array $varse le chiavi (ad es ['image'].). Sono abbastanza sicuro che non sia permesso.
macchine

Ho rimosso gli spazi, in realtà non importa e ho lo stesso risultato con o senza spazi. Gli spazi provengono dal codice che ho copiato da un esempio.
Scienziato pazzo,

Hai rinominato la funzione? Non dovrebbe essere, template_preprocess_imagegallery_formatma 'modello' dovrebbe essere sostituito con il nome del tema o del modulo. Avrai anche bisogno di cancellare la cache.
macchine

Risposte:


8

Alla fine ho risolto il problema, si scopre che il problema era che ho provato ad aggiungere le variabili nel preprocessore sbagliato. La modifica del #theme funziona lì, ma per aggiungere variabili avevo bisogno di preelaborare il tema che ho impostato lì:

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 del tema: atvdirect

  • crea un file atvdirect.theme alla radice del tuo tema, a parte atvdirect.info.yml
  • aggiungi sotto il codice nel file atvdirect.theme
  • usa {{logopath}} in page.html.twig

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

1
Grazie per aver finalmente detto in quale file dovrebbe essere inserito.
Ryan H

Ottima risposta, ben spiegata.
Allievo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.