Wie setze ich Variablen für variable_get ()?

9

Ich versuche zu verstehen variable_get(). Ich habe bisher gelesen, dass Sie mithilfe des $confArrays Variablen in der settings.php festlegen und diese später im Code mithilfe von abrufen können variable_get(). Ich habe gelesen, dass Sie auch variable_get()Werte aus der Datenbank abrufen können.

Wie funktioniert das?
Gibt es eine Tabelle, die automatisch erstellt wird?
Wie würden Sie Variablen festlegen, wenn diese Funktion möglich ist?

cthrucode
quelle

Antworten:

25

Vielleicht hoffen Sie zu erfahren, dass variable_set der magische Weg ist, alle Arten von strukturierten Daten in Ihrer Datenbank zu speichern, und dass variable_get der Weg ist, sie wieder herauszuholen. Leider ist es nicht.

Die "persistenten Variablen", wie sie häufig genannt werden, sind für relativ einfache Schlüssel-Wert-Paare gedacht, die über Anforderungen, Benutzer und Sitzungen hinweg bestehen bleiben sollen, häufig bis ein Site-Administrator den Wert ändert. Ein gutes Beispiel ist der Site-Name.

Wie funktioniert es?

Wenn Drupal gebootet wird, werden alle Variablen aus dem Cache (falls verfügbar) oder aus der Variablentabelle gelesen. ( Den genauen Code finden Sie unter variable_initialize .) Die Variablen und in der globalen $confVariablen gespeichert , ein riesiges Array. Drupal tut dies, weil es effizienter ist, als jedes Mal, wenn eine Variable benötigt wird, eine Datenbankabfrage durchzuführen. (Dies ist auch der Grund, warum variable_set nicht für große Datenmengen geeignet ist: Sie werden bei jeder Anforderung geladen!)

Bei jeder Verwendung variable_get('variable_name', 'default_value')wird der Variablenname im Array $ conf nachgeschlagen. Wenn es existiert, wird der Wert zurückgegeben; Andernfalls wird der Standardwert zurückgegeben.

Schließlich gibt es noch ein drittes Familienmitglied: variable_del . Wie der Name schon sagt, wird dadurch eine Variable aus der Variablentabelle gelöscht. Diese Funktion wird häufig in hook_uninstall- Implementierungen verwendet und löscht Variablen, wenn ein Modul deinstalliert wird.

Wenn Sie nach Möglichkeiten suchen, komplexere benutzerdefinierte Datenstrukturen in der Datenbank zu speichern, überprüfen Sie hook_schema und drupal_write_record oder verwenden Sie das Drupal-Entitätssystem und die Entitäts-API .

Marcvangend
quelle
7
Ein weiterer wichtiger Hinweis ist, variable_set()dass der variable Cache neu erstellt wird. Daher ist er normalerweise für Daten reserviert, die ziemlich langlebig und konsistent sind, wie z. B. Administratoreinstellungen und dergleichen. Oder anders ausgedrückt, es sollte nicht anstelle oder wie statische Variablen zwischen Funktionen verwendet werden, die sich während des Seitenaufbaus ändern.
Jimajamma
5

Wenn Sie Drush verwenden (dringend empfohlen), können Sie über drush vget > variables.txtdie Befehlszeile eine Textdatei mit einer Liste aller aktuellen Variablen und ihrer Werte erstellen. Ebenso können Sie drush vsetfestlegen, dass jede Variable auf einen anderen Wert gesetzt wird.

Siehe GitHub für mehr Details über variable-get, variable-setund andere nützliche Befehle.

mrP
quelle
3

Um Variablen zu setzen, würden Sie variable_set () verwenden . Dann können Sie sie mit variable_get () abrufen . Sie sollten sich mit der Drupal-API-Site vertraut machen.

Die gespeicherten Variablen finden Sie in der Variablentabelle.

Triskelion
quelle
Aus der obigen Diskussion geht nicht hervor, wie eine Variable in einem benutzerdefinierten Modul festgelegt wird. Wie setze ich eine Variable aus einem benutzerdefinierten Modul?
Fawwad