Ich habe 2 Hook-Funktionen in meinem Modul: hook_views_pre_render()
und hook_form_alter()
; In hook_views_pre_render()
rufe ich einige Daten darüber ab, welche verfügbaren Knoten ich benötige hook_form_alter()
.
Ich suche nach einer Möglichkeit, die Daten von hook_views_pre_render()
an weiterzugeben hook_form_alter()
. Es scheint einfach, aber ich kann es nicht zum Laufen bringen. Hat jemand eine Idee?
Was im Moment global $aVariable
funktioniert, ist, beide Hook-Funktionen zu erweitern, aber ich glaube, es sollte einen besseren Weg geben.
In Drupal 7 kann auch drupal_static () verwendet werden, wenn der gespeicherte Wert nicht zwischen verschiedenen Seiten bestehen bleiben muss.
drupal_static()
wird normalerweise als aufgerufendrupal_static(__FUNCTION__, $default_value)
, aber wenn Sie den Namen der Funktion verwenden, können Sie auf denselben Wert zugreifen, auf den über die aufrufende Funktion zugegriffen wirddrupal_static()
.Die Verwendung von
variable_set()
undvariable_get()
der Wert bleibt zwischen verschiedenen Seiten bestehen und wird nicht automatisch entfernt. Wenn der erste Hook Code ähnlich dem folgenden ausführt, erhält das zweite Modul einen älteren Wert.Anstatt solchen Code zu verwenden, sollte der erste Hook Code ausführen, der dem folgenden ähnlich ist.
Stellen Sie unabhängig von der gewählten Methode sicher, dass der Hook, der den Wert liest, effektiv ausgeführt wird, nachdem der Hook diesen Wert festgelegt hat.
quelle
drupal_static()
als aufgerufen&drupal_static($value_name, $default_value)
. Die Funktion, die den Wert einstellt, wird normalerweise__FUNCTION__
als verwendet$value_name
, dies ist jedoch nicht erforderlich. Solange die Funktion keine Konflikte mit anderen Funktionen erzeugt, ist jeder Wert gut, auch wenn ihm__FUNCTION__
Hilfen vorangestellt werden .Wenn Sie Informationen zu übergeben , die nur in zur Verfügung steht ,
hook_views_pre_render
umhook_form_alter
eine globale Variable könnte die beste Option sein; vorzugsweise benannt, um die eingeschränkte Rolle klar zu machen, z_mymodule_available_nodes
.Der beste Ansatz wäre, Ihre Daten zu Objekten hinzuzufügen, die die beiden Aufrufe gemeinsam haben. In diesem Fall scheint es leider keine Gemeinsamkeiten zu geben, so dass dies nicht funktioniert.
Möglicherweise können Sie Sitzungsdaten verwenden, aber das wäre für diese Anwendung übertrieben und scheint keine klaren Vorteile gegenüber einer globalen zu bieten.
Ich empfehle nicht, variable_set / variable_get zu verwenden.
variable_set
Löscht den Variablencache bei jedem Aufruf und alle Variablenwerte werden bei jeder Seitenanforderung abgerufen. Dies ist keine gute Übereinstimmung für Daten, die sich ständig ändern und möglicherweise groß sind.quelle
drupal_static()
ist lokal fürdrupal_static()
, aber die Funktion gibt den Wert der Variablen als Referenz zurück. Dies bedeutet, dass die aufrufende Funktion den Wert der Variablen ändern kann, auch wenn es sich um eine statische lokale Variable für handeltdrupal_static()
.