node/add form validieren
am 25.04.2012 - 13:13 Uhr in
HAllo,
hat jemand ein fähiges tutorial zum validieren des node/add forms...eventuel "hook_node_validate"???
Begreif das nicht ganz...
Ich will beim erstellen eines Contenttypes ein Die abgeschickten Daten abfangen, verändern(bzw mit werten einer datenbank abgleichen und gewisse Felder meines Contenttypes dann automatisch befüllen) und falls ungültige Eingaben gemacht wurden eine Fehlermeldung ausgeben und das speichern des Inhaltes abbrechen...
Das abgleichen und ergänzen der Daten erledige ich über "hook_node_presave"...
Wie kann ich am besten ein redirect(je nach dem ob Eingabe gültig oder ungültig) und eine vernpünftige validierung realisieren...
Was sind gängige/elegante Lösungen, z.B bestimmte hooks?
Danke im vorraus
- Anmelden oder Registrieren um Kommentare zu schreiben

Hallo, Bin eben über das da
am 25.04.2012 - 14:07 Uhr
Hallo,
Bin eben über das da gestolpert,
was Deine Frage beantworten könnte.
also ein modul das diverse
am 25.04.2012 - 14:54 Uhr
also ein modul das diverse validierungen über ein UI kann ist http://drupal.org/project/field_validation
und hier ein snippet für den redirect nach node save: http://blog.valderama.net/node/11
hth,
walter
Das war schonmal sehr
am 26.04.2012 - 20:06 Uhr
Das war schonmal sehr hilfreich, aber bringt mich zu überaus unbefriedigenden Ergebnissen.
Mein Contenttype enthält ein Feld für eine PLZ und Felder für Bundesland,Landkreis wie Stadt...
Bundesland,Landkreis und Stadt sind hierbei wichtige Informationen....Der User soll aber um das Formular schlank und einfach zu halten nur seine PLZ eingeben...
Die restlichen Felder sollen nach Abgleich mit einer Geo-Datenbank (OpenGeoDB) selbstständig ergänzt werden (die entsprechenden ID's werden eingetragen)...
Zu diesem Zweck also die "hook_node_presave"-Funktion..läuft wie geschmiert. Nun soll das speichern des Formulars aber abgebrochen (und auf eine Fehlerseite redircted werden) falls die angegebene PLZ in der Datenbank nicht gefunden wird...
Wie ich erfahren habe ist das speichern jedoch an dem Punkt an dem "hook_node_presave" greift nicht mehr aufzuhalten.
Nun muss ich also die Validate-Funktion vor der "hook_node_presave"-Funktion einsetzen um dies zu überprüfen...wirkt für mich mehr als umständkich: mehr Funtionsaufrufe und zusätzliche SQL-Abfragen, die schlicht unnötig sind....Das wirkt auf mich perfomance-technisch ziemlich suboptimal.Eine wahre Todsünde.
Jegliche Versuche in meiner validate-Funktion Werte wie in "hook_node_presave" über $form bzw. $form_state zu ändern greifen ins leere, z.B.
<?php
$form_state['values']['field_city_id']['0']['value'] = $r_plz[0]->city_id;
?>
Kann mir die Werte von $form bzw. $form_state in der validierungs-Funktion, also nach dem abschicken leider nich per dprint_r oder ähnlichem anzeigen lassen.
Soll das wirklich so umständlich laufen? Habe das Geühl die vorgesehenen Funktionen nicht korrekt zu nutzen, mit welchen hooks kann man den oben beschriebenen Ablauf sauber durchziehen? Iwe breche ich das speichern bein ungültigen PLZ's am besten ab?
Bin echt dankbar für jede weitere Hilfe, hab schon Schaum vorm Mund, 'n einfaches Formular kann doch nicht so schwer sein....
Dann könntest Du das
am 26.04.2012 - 21:11 Uhr
Dann könntest Du das vielleicht mit Ajax/JQuery lösen? Dann bist Du in jedem Fall _vor_ den Hooks.
Konkret habe ich sowas noch nie selbst umsetzen müssen, aber mit diesen Stichwörtern "drupal node validation ajax jquery" könntest Du fündig werden.
Eine weitere Möglichkeit ist,
am 26.04.2012 - 22:22 Uhr
Eine weitere Möglichkeit ist, sich mittels hook_form_alter in den Submit einklinken und auf eine eigene Validation-Routine umzubiegen. Daraus kannst Du problemlos wieder in die Form zurück. Das passiert auf jeden Fall vor dem Speichern der Node.
Beste Grüße
Werner
Ja, so habe ich das zur zeit
am 27.04.2012 - 07:20 Uhr
Ja, so habe ich das zur zeit gelöst, aber genau das will ich ja nicht...Das Problem ist doch das ich in der validierungs-funktion SQL-querys absetze um die PLZ zu validieren (also in der DB gucken ob die PLZ auch existiert) und das selbe im presave nochmal machen muss um mithilfe der DB die Werte für Landkreis, Bundesland und Stadt zu ergänzen. Das ergänzen der Daten ist mir in der validate-funktion nicht gelungen...ich weise den Feldern wie in dem PHP-Code oben beschrieben die Werte zu aber er nimmt sie nicht mit!!
Und ich versuche halt den Aufruf von Funktionen und ganz besonders die Anzahl der SQL-Aufrufe so gering wie möglich zu halten, da Drupal so schon langsam genug ist.
Während ich schreibe kommt mir jedoch der Gedanke meiner validierungs-funktion einfach das $node-attribut (wie in "hook_node_presave") zu übergeben...vielleicht klappts dann, gebe rückmeldung sobald ich es ausprobieren konnte.
Bin für weitere Vorschläge nachwievor offen