Problem mit hook_form_alter
am 14.04.2010 - 20:18 Uhr in
Hallo Ihr,
ich habe folgendes Problem bei meinem Modul:
Ich hab mittels hook_node_info() einen neuen Inhaltstyp erstellt und dann mit hook_form_alter() erweitert. In dieser function wird jqueryui (natürlich übers entsprechende modul) inklusive css geladen. Ich brauch nämlich den coolen datepicker! Wenn ich jetzt einen Inhalt erstellen will und (absichtlich) die erforderlichen Felder nicht ausfülle, dann lädt er nach dem submit die js und css von jquery nicht mehr! Die Site sieht in diesem Zustand so aus, dass ganz oben im roten Warnungsfeld die Warnungen stehen und die entsprechenden Felder rot umrahmt sind. Wiso lädt er jetzt jquery nicht?
Könntet ihr mir bitte helfen? Ich bin für jede Frage offen und bedanke mich schon mal für jede Antwort!
lg Martin
- Anmelden oder Registrieren um Kommentare zu schreiben
hook_form() und Caching
am 15.04.2010 - 07:54 Uhr
Moin,
das Formular wird von Drupal gecacht. Beim submit holt sich Drupal das Formular dann aus dem Cache und lädt es nicht mehr erneut. Das gleiche Problem hatte ich auch gestern gerade.
Hier eine Lösung:
Wenn du folgendes in dein hook_form_alter() einbaust, dann wird das Formular nicht mehr aus dem Cache beim submit geladen sondern neu zusammen gebaut. Geht etwas auf die Performance hilft aber, dass hook_form_alter() erneut aufgerufen wird und damit deine JavaScript Dateien mit neu geladen werrden.
// FORCE REBUILING OF FORM WHEN SUBMITTED
unset($form['form_build_id']);
Ne andere Frage: Wenn du deinen eigenen Content Type baust, dann solltest du wahrscheinlich hook_form() und nicht hook_form_alter() verwenden. hook_form_alter() wird bei jedem Formular aufgerufen. hook_form() nur bei deinem Formular des Inhaltstypen. Ist besser für die Performance und die Sicherheit deines Codes. Du kannst so z.B. nicht aus Versehen ein anderes Formular verändern.
siehe http://api.drupal.org/api/function/hook_form/6
Hi, vielen Dank! Es
am 15.04.2010 - 16:16 Uhr
Hi,
vielen Dank! Es funktioniert so!
Das ist mein erstes Modul, bin also absoluter Anfänger. Ich werd das dann mal mit hook_form() probieren und falls es probleme gibt gleich hier posten.
lg Martin
hook_insert
am 15.04.2010 - 21:10 Uhr
Halloo,
ich hab leider schon wieder ein Problem.
Wenn ich die Daten, die im erstellten form eingegeben wurden überarbeiten möchte und danach in die Datenbank speichern möchte, verwende ich hook_insert() oder?
Ich hab absolut keinen Plan, wie ich in dieser Funktion auf die Daten vom Formular zugreifen kann.
Bitte um eure Hilfe! DANKE!
lg Martin
Sorry.. schon wieder ein Problem
am 15.04.2010 - 21:11 Uhr
Und schon wieder habe ich eine Frage:
Was muss ich machen, damit in der function hook_nodeapi(...) die Variable $op den Wert 'update' enthält? Ich hab schon 1000 Sachen versucht, aber es steht immer nur sowas wie "loadviewalter". Warum verwenden andere Module in der switch($op) Anweisung "case 'update':", wenn der Fall sowiso nie auftritt?
Danke für die Hilfe!
lg Martin
Guten morgen, ich schätze mal
am 16.04.2010 - 07:01 Uhr
Guten morgen,
ich schätze mal deine Ausgabe ist falsch. Es sind die Operationen load, view, alter, also drei verschiedene.
Lass die die $op so ausgeben:
echo "OP: ".$op."<br />\n";
Dann siehst du mehr.
$op=update wird aufgerufen, wenn ein existierender Knoten (node) wieder bearbeitet und dann erneut gespeichert wird. $op=insert wird aufgerufen, wenn ein neuer Knoten angelegt und gespeichert wird.
Folgendes noch: hook_nodeapi() dient dazu fremde Inhaltstypen zu modifizieren. Wenn du deinen eigenen Inhaltstypen bearbeiten willst und Zusatzinfos speichern möchtest, dann wäre die Verwendung von hook_insert() und hook_update() empfehlenswert. Die werden aufgerufen wenn dein eigener Inhaltstyp gespeichert wird. Insert, wenn der Knoten neu erstellt wird, update wenn ein vorhandener Knoten bearbeitet wurde.
Gruß
Carsten