Ruft Ajax, das in Ansichten verwendet wird, Vorverarbeitungs-Hooks auf?

6

Ich habe eine Ansicht mit einer Reihe von Feldern und gestalte diese Felder wie folgt:

views-view-fields.html.twig

In meiner .theme-Datei verwende ich auch eine Vorverarbeitungsfunktion, um zusätzliche Variablen an die obige Vorlage zu übergeben.

function theme_preprocess_views_view_fields(&$vars) {
  $vars['my_var'] = 'hello';
}

In der Zweigvorlage kann ich also Folgendes tun:

{% for field in fields -%}
  {{my_var}}
{%- endfor %}

Dies funktioniert wie ein Zauber für die ersten geladenen Felder, aber wenn ich auf "Mehr laden" drücke oder exponierte Filter verwende, um die Ansicht herauszufiltern, haben die anderen geladenen Elemente nicht my_var.

Jetzt "kinting" my_var direkt in der Vorlagendatei. Ich habe gesehen, dass my_var für alle anderen Elemente, die nach Ajax geladen wurden, NULL ist, und dies hat mich zu dem Gedanken gebracht, dass das Problem darin besteht, dass theme_preprocess_views_view_fields einmal aufgerufen wird, wenn die Seite zum ersten Mal geladen wird und vom Ajax-Aufruf vollständig ignoriert wird.

Sollte dieser Vorprozess nicht vom Ajax-Aufruf aufgerufen und verarbeitet werden, den Drupal in der Ansicht selbst ausführt?

Wenn nicht, gibt es eine Möglichkeit, Drupal abzufragen, um diesen Hook erneut auszuführen, wenn andere Elemente geladen werden?

Vielen Dank!

Drupalotto
quelle
1
"kinting" haha ​​das hat meinen tag gemacht.
Kein Sssweat
:) froh, dass es so war! Haben Sie auch Vorschläge?
Drupalotto
@Drupalotto Haben Sie versucht, den Cache Ihrer Ansichten zu deaktivieren? Überprüfen Sie einfach den Grund.
Jonh
@neetu morwani ..
Jonh
Das Zwischenspeichern in den Ansichten ist deaktiviert. Scheint kein Caching-Problem zu sein. Hook_preprocess_views_view wird nicht aufgerufen, wenn die nächsten Zeilen über den Ajax-Pager aufgerufen werden. Gibt es eine Möglichkeit, variable Array-Zeilen von AJAX vorzuverarbeiten?
Neetu Morwani

Antworten:

2

In der Vorlage "views-view-fields.html.twig" werden drei Variablen zurückgegeben: "view", "fields", "row". Sie können dies hier sehen .

Um Ihre benutzerdefinierten Variablen hinzuzufügen, müssen Sie sie wie unten beschrieben in diese drei Variablen einfügen

 function dt8_preprocess_views_view_field(&$vars)
  {
    $vars['row']->my_var = 'Hey';
  }

und in unserer Vorlage "views-view-fields.html.twig" drucken wir int so

{{ row.my_var }}
Adil Ech-charafi
quelle