Deutsche Zope User Group
Gast 1 Benutzer online
DZUG-News

portal_form

Das portal_form tool stellt Pr�f- und Navigationsdienste f�r Formulare zur Verf�gung. Die in PLone eingebauten Objekte nutzen von nun an das portal_form tool.

Um zu sehen wie PortalForm? arbeitet, betrachten wir den Vorgang der Bearbeitung eines Links:

Als erstes bemerkt man die neue URL unter der der Link bearbeitet wird. Bis dato hatte man Links bearbeitet unter .../myLink/link_edit_form. Die zu diesem Formular geh�rige Action bestand aus einem Skript, ../myLink/link_edit, dieses rief einen VAlidator? (Pr�fer) auf und veranlasste seinerseits die Navigation, abh�ngig von der Ausgabe der Validation. Falls die Pr�fung fehlschlug, bekam man eine Fehlermeldung zu sehen; im Falle wurde man zu einer abschlie�enden Zielseite geleitet.

Die neue URL zum Bearbeiten von Links lautet ../myLink/portal_form/link_edit_form. Die Action des neuen Formulars selber lautet: ../myLink/portal_form/link_edit_form. Das portal_form tool unterbricht das URLTraversal? und sucht nach aktuell �bermittelten Werte. Wenn es neue Werte findet, so sucht es eine Anzahl Validators f�r das Formular im [portal_properties]?/[form_properties]? und l��t diese auf den �bermittelten Werten laufen. Die Kette der Validators gibt entweder 'success'oder failure zur�ck. PortalForm? schaut in [portal_properties]?/[navigation_properties]? was als n�chstes passieren soll und leitet weiter an das passende Ziel. Weil portal_form die Aufrufe der Validation und Navigation steuert, ist alles was Ihr Code zur Formular-Verarbeitung zu tun hat, Ihr Objekt upzudaten. Das Ergebnis: Einfacher modulare Validatoren und einfacher Formularverarbeitungs-Code die e infach mit Hilfe der PropertySheets in [portal_properties]? umkonfiguriert werden k�nnen.

Was Sie brauchen um portal_form f�r Ihre Formulare einsetzen zu k�nnen:

(1) In Ihrem Formular: �ndern sie die Action Ihres Formulars so, da� sie es an sie selbst �bermittelt (=submit) (Setzen von action auf request/URL - siehe auch link_edit_form). Au�erdem? eine HiddenVariable? ' form_submitted mit dem Wert template/id. PortalForm? testet REQUEST.form_submitted um zu bestimmen, ob ein Formular �bermittelt wurde oder nicht. Die �nderungen an link_edit_form sind kommentiert.

(2) Registieren Sie eine Gruppe Validatoren f�r Ihr Formular. Die Registratierung geschieht mittels eines Aufrufs der setValidators() Methode in portal_form. Das erste Argument ist der Name des Formulars, der zweite ist eine Liste der Validatoren. Zum Beispiel:

  portal_form.setValidators('link_edit_form', ['validate_id', 'validate_link_edit'])

Sie k�nnen ebenso doe Validatoren per Hand in [portal_properties]?/[form_properties]? registrieren.

Die Validatoren in der Liste werden der Reihenfolge nach aufgerufen. Im Beispiel oben, ist validate_id ein generischer Validator, der von den meisten Formularen benutzt wird, um die ID eines Objekts zu �berpr�fen. und validate_link_edit pr�ft die properties die zur Link-Klasse geh�ren.

(3) Schreiben Sie einen Validator f�r Ihr Formular. Der Validator sollte folgendes zur�ckliefern: (1) Den Status (gew�hnlich entweder success oder failure), (2) Eine Anzahl von Fehlermeldungen in einem dictionary, und (3) ein dictionary bestehend aus properties, die zum n�chsten Navigations-Zustand weitergegeben werden. Wenn Ihr Validator Teil einer Kette ist, so werden Sie Zugriff auf die Status- bzw. Fehlermeldungen der vorherigen Validatoren der Kette haben wollen. Diese Werte sind im REQUEST als REQUEST['validation_status'] und REQUEST['errors'] zu finden.

Eine gewohnte Anwendung des properties dictionary ist es, PortalStatusMessage?-s durch das Setzen von portal_status_message weiterzugeben. Das NavigationTool gibt diese properties weiter zum n�chsten Zustand der Navigation, entweder im REQUEST (falls der n�chste Zustand ein PageTemplate oder ein PythonScript ist) oder als QueryParameter? (falls der n�chste Zustand eine URL oder eine Action ist). Beachten Sie, da� falls Sie ein Script nach der Validation aufrufen, da� es die portal_status_message aus dem REQUEST holt und zum n�chsten Zustand der Navigation weitergibt.

(4) Schreiben Sie eine FormHandler?. Der handler sollte Ihr Objekt und seine MetaDaten? aus dem REQUEST �ndern und den Status-Code zur�ckliefern. Jeder weitere Code zum Aufruf zum Aufruf des Validators und zur Navogation, wird nun nicht mehr gebraucht und sollte gel�scht werden. Ihr FormHandler? sollte ein tuple bestehend aus dem Status (meist success oder failure) im [context]? der vom n�chsten Navigationszustand genutzt wird, zur�ckgeben (die R�ckgabe des context erlaubt Objekten, durch [portal_factory]? inititalisiert zu werden. - siehe unten), und ein dictionary aus properties, das zum n�chsten Zustand der Navigation weitergegeben wird.

(5) Setup der von Ihrem Formular ben�tigten Navigation in portal_navigation (siehe unten)