Wie füge ich in meiner Vorverarbeitungsfunktion eine Variable für eine Twig-Vorlage hinzu?

10

Ich verwende den folgenden Code, um die Variablen für meine Vorlage vorzuverarbeiten:

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

Die Variable #uri ist bereits vorhanden, und wenn ich sie nur ändere, funktioniert alles einwandfrei. Aber ich muss hier zusätzliche Variablen hinzufügen, da ich zwei verschiedene Stile desselben Bildes benötige. Das einfache Hinzufügen dieser Variablen zum Array funktioniert jedoch nicht.

Wenn ich die verfügbaren Variablen in meiner Twig-Vorlage mit speichere {{ dump(_context|keys) }}, werden die dort hinzugefügten Variablen nicht angezeigt. Wenn ich versuche, sie in meiner Vorlage zu verwenden, wird nichts eingefügt.

Ich kann sehen, dass die Werte dem Array hinzugefügt werden. Wenn ich die Bildvariable in dem Thema speichere, das das gesamte Feld rendert, werden meine Variablen im Array angezeigt. Sie sind jedoch immer noch nicht in der Vorlage verfügbar, mit der die Bildvariable selbst gerendert wird.

Was muss ich noch tun, um meiner Vorverarbeitungsfunktion eine Variable hinzuzufügen, die ich in meiner Twig-Vorlage verwenden kann?

Verrückter Wissenschaftler
quelle
Sie haben ein Leerzeichen zwischen dem Arraynamen $varsund Ihren Schlüsseln (z ['image']. B. ). Ich bin mir ziemlich sicher, dass das nicht erlaubt ist.
andere Maschinen
Ich habe die Leerzeichen entfernt, es spielt eigentlich keine Rolle und ich habe das gleiche Ergebnis mit oder ohne Leerzeichen. Die Leerzeichen stammen aus Code, den ich aus einem Beispiel kopiert habe.
Mad Scientist
Haben Sie die Funktion umbenannt? Es sollte nicht sein, template_preprocess_imagegallery_formataber 'Vorlage' sollte durch Ihren Themen- oder Modulnamen ersetzt werden. Sie benötigen außerdem einen leeren Cache.
andere Maschinen
Es wurden einige gute Ressourcen gefunden: Best Practices für Zweige - Vorverarbeitungsfunktionen und -vorlagen sowie Übersicht über das Themensystem .
andere Maschinen

Antworten:

8

Ich habe das Problem endlich gelöst. Es stellte sich heraus, dass ich versucht habe, die Variablen im falschen Präprozessor hinzuzufügen. Das Bearbeiten des #theme funktioniert dort, aber um Variablen hinzuzufügen, musste ich das dort festgelegte Thema vorverarbeiten:

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']);
}
Verrückter Wissenschaftler
quelle
4

Themenname: atvdirect

  • Erstellen Sie eine Datei atvdirect.theme im Stammverzeichnis Ihres Themas, abgesehen von atvdirect.info.yml
  • Fügen Sie den folgenden Code in die Datei atvdirect.theme ein
  • Verwenden Sie {{logopath}} in page.html.twig

    <?php
    function atvdirect_preprocess_page(&$variables) {
      $variables['logopath'] = '/'.drupal_get_path('theme','atvdirect') .'/logo.png';
    }
    ?>
Gurcharan
quelle
1
Vielen Dank, dass Sie endlich gesagt haben, in welcher Datei dies abgelegt werden soll.
Ryan H
Hervorragende Antwort, gut erklärt.
Schüler