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.