Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

Settings

Area/TypeNameDescriptionDefaultScope
pifafield-css-classes 'half-row,full-row,line-bottom,line-top'SCGU
pifatimestamp'always', 'byform', 'never''always'SCGU

PIFA Extensions

Im Plugin form_assistant gibt es einen Unterordner namens "extensions". In diesem kann man eigene FormModule- und FormProcessor-Klassen ablegen, die, sofern sie der Namenskonvention (s.u.) folgen und eine Klasse enthalten, die von PifaAbstractFormModule bzw. PifaAbstractFormProcessor erben, automatisch vom PIFA erkannt und im Dialog des ContentTypen CMS_PIFAFORM zur Auswahl angeboten werden.

Namenskonventionen

Extensions sind in Dateien abzulegen dern Namen folgende Form hat: class.pifa.<class_name>.php.
Im Dateinamen ist "class_name" komplett klein zu schreiben und mit Unterstrichen zu trennen!
Die Klasse *in* dieser Datei ist wiederum in der "CamelCase"-Notation zu schreiben. Aus "class_name" wird "ClassName".
Beispiel: Die Klasse MailedFormProcessor findet sich in der Datei class.pifa.mailed_form_processor.php.

Vererbung von Extensions

Eine eigene FormModule-Klasse muß von PifaAbstractFormModule, eine FormProcessor-Klasse von PifaAbstractFormProcessor erben.
Durch die Vererbung stehen einer Instanz der eigenen FormProcessor-Klasse u.a. folgende Methoden zur Verfügung:

public function getModule() {
    // returns instance of defined FormModule
}

public function getForm() {
    // returns instance of PifaForm
}

Implementation einer eigenen FormModule-Klasse

Eine FormModule-Klasse ist für das Verhalten des Formulares zuständig, d.h. wie ein PIFA-Formular auf verschiedene Anfragen (GET bzw. POST) reagiert. Wie man seine eigene FormModule-Klasse implementiert werde ich später erklären.

Implementation einer eigenen FormProcessor-Klasse

Eine FormProcessor-Klasse hingegen ist für die Verarbeitung der erfaßten Daten verantwortlich. Der DefaultFormProcessor z.B. implementiert keine "eigenen" Aktionen, so daß ausschließlich das Verhalten seiner Vaterklasse (PifaAbstractFormProcessor) dafür sorgt, daß die Daten aus der Anfrage gelesen, validiert und in der Datenbank gespeichert werden. (Ich weiß, hier habe ich einen kleinen Fehler in der Architektur begangen.)

Der MailedFormProcessor hingegen erweitert das o.g. Verhalten des PifaAbstractFormProcessor um das Versenden von zwei Mails, einer an die Adresse des Benutzers, eine an das System (z.B. den sysadmin). Um das Verhalten seines FormProcessors zu implementieren kann der Entwickler folgende Methoden überschreiben oder überlagern:

 

protected function _processReadData() {
}

protected function _processValidatedData() {
}

protected function _processStoredData() {
}

 

Dabei handelt es sich um "Schablonen"-Methoden die nach dem lesen, validieren bzw. speichern aufgerufen werden.

Ist es mit dem neuen Formular-Assistent möglich die Inhalte des Formulars als Anhang (csv) zu senden?

Um der erzeugten Mail auch die Formulardaten als CSV-Datei anzuhängen schreibst du dir einen eigenen FormProcessor (z.B. MaildCsvFormProcessor) und kopierst den Code aus dem MailedFormProcessor. Mittels PifaAbstractFormProcessor::getForm() holst du dir das Formular, dessen Daten du wiederum mittels PifaForm::getValues() erhältst. Daraus kannst du dir nun deinen Anhang bauen. Alternativ kannst du dir auch die Methode PifaForm::getCsv() anschauen, vielleicht kannst du ja mit der was anfangen.

Format der XML-Export-Datei

Mit der Version 1.1 des PIFA steht nun das Feature "Im- und Export von Formularen" zur Verfügung. Hier soll das Format der erzeugten XML-Datei erläutert werden um so auch das händische Erzeugen von Formularen mittels XML zu ermöglichen.

PIFA - Struktur der XML-Datei

Jede PIFA-XML-Datei besteht aus genau einem "pifa"-Element mit genau einem "form"-Element. Optional kann auch genau ein "data"-Element enthalten sein. Das "form"-Element samt Nachfahren beschreibt die Struktur des Formulares, wogegen das "data"-Element die erfaßten Formulardaten dokumentiert.

 

<pifa>
	<form>
		<field></field>
		...
	</form>
	<data>
		<row></row>
		...
	</data>
</pifa>

FORM - Struktur des Formulares

Das "form"-Element dient der Definition des Formulares als solches. Diese werden als Attribute gespeichert. Zudem enthält es (optional) "field"-Elemente zur Definition der einzelnen Formularfelder welche weiter unten erläutert werden. Folgende Attribute werden unterstützt:

AttributWerteBeschreibung
nameZeichenketteDer Name des Formulares, so wie es im Backend in der linken Navigation ausgegeben wird.
tableZeichenketteDer Name der Datenbank-Tabelle zur Speicherung der Formulardaten.
methodget | postAnfragemethode beim Absenden des Formulares.
timestamptrue | falseOb beim Speichern von Formulardaten auch ein Zeitstempe erfaßt werden soll. Siehe Setting "pifa/timestamp".

FIELD - Struktur der Formularfelder

 

<form name="contact" table="con_pifa_contact" method="post" timestamp="true">
	<field rank="1" type="select" column="salutation" obligatory="true">
		<label display="true">Anrede</label>
		<error>Bitte wählen Sie die Anrede aus</error>
		<options>
			<option>Bitte wählen</option>
			<option value="Mrs">Frau</option>
		</options>
	</field>
</form>

<field rank="2" type="inputtext" column="first_name" obligatory="true"><label display="true">Vorname</label><error>Bitte geben Sie Ihren Vornamen ein</error></field><field rank="3" type="inputtext" column="last_name" obligatory="true"><label display="true">Nachname</label><error>Bitte geben Sie Ihren Nachnamen ein</error></field><field rank="4" type="inputtext" column="company" obligatory="false"><label display="true">Firma</label></field><field rank="5" type="inputtext" column="street" obligatory="true"><label display="true">Straße</label><error>Bitte geben Sie die Straße ein</error></field><field rank="6" type="inputtext" column="street_number" obligatory="true"><label display="true">Hausnummer</label><error>Bitte geben Sie die Hausnummer ein</error></field><field rank="7" type="inputtext" column="plz" obligatory="true"><label display="true">Postleitzahl</label><error>Bitte geben Sie die Postleitzahl ein</error></field><field rank="8" type="inputtext" column="city" obligatory="true"><label display="true">Ort</label><error>Bitte geben Sie den Ort ein</error></field><field rank="9" type="textarea" column="message" obligatory="true"><label display="true">Ihre Nachricht</label><error>Bitte geben Sie die Nachricht ein</error></field><field rank="10" type="inputtext" column="phone" obligatory="true"><label display="true">Telefon</label><error>Bitte geben Sie die Telefonnummer ein</error></field><field rank="11" type="inputtext" column="email" obligatory="true"><label display="true">E-Mail-Adresse</label><error>Bitte geben Sie die E-Mail Adresse ein</error></field><field rank="12" type="inputcheckbox" column="privacy" obligatory="true"><label display="true">Datenschutzerklärung</label><error>Bitte bestätigen Sie die Datenschutzerklärung</error><classes><class>privacy</class></classes><options><option value="1">Ich aktzeptiere die Datenschutzerklärung</option></options></field><field rank="13" type="buttonsubmit" obligatory="false"><label display="true">Absenden</label><classes><class>button_red</class></classes></field><field rank="14" type="buttonreset" obligatory="false"><label display="false">Zurücksetzen</label><classes><class>button_grey</class></classes></field></form></pifa>

  • No labels