Der Hook User


Der hook_user kann einem ziemlich viel Bauchweh machen. Eigentlich ist es ja ziemlich trivial, aber anscheinend doch nicht ganz 😉

Der hook_user wird vom Modul user aufgerufen. Er ermöglicht es einem anderen Modul das global $user Objekt zu verändern. Es gibt jedoch dabei ein paar … naja Probleme:

  • Der hook_user() wird zu spät aufgerufen. Zwar wird der Benutzer und seine originalen Daten relativ früh geladen (dazu gehören uid, time und alles war auch sonst noch in der users Tabelle zu finden ist). Über den hook_user werden dann weitere Informationen hinzugefügt. Dies passiert jedoch manchmal zu spät!

Dazu habe ich eigentlich zwei Lösungsansätze gefunden:

  1. In der users Tabelle gibt es eine Spalte data. In dieser lassen sich beliebige Informationen speichern. Dass lässt sich relativ einfach machen: user_save. Das Problem hier ist jedoch, dass die Daten dann halt eben serialisiert werden und wenn man etwas damit machen will, so ist das nicht ganz so einfach.
  2. Als zweite Möglichkeit wäre dann halt eben den hook_user zu verwenden. Dann lassen sich die Daten in einer beliebigen Datenstruktur abspeichern. Über hook_user können sie dem $user objekt hinzugefügt werden und falls man die Daten ein wenig früher laden will, muss man den hook einfach manuell aufrufen. Mit einer if Abfrage schaue ich, ob die Daten geladen sind und falls nicht dann rufe ich hook_user auf.

Das Ganze mag vielleicht nicht sehr logisch erscheinen… aber wer sich mal intensiv mit dem hook System befasst wird auf solche Probleme stossen. Ich bin immer noch auf der Suche nach einer guten Dokumentation, welche genau beschreibt, wie und wann welche Hooks aufgerufen werden.