Formular-Assistent: Inhalte als CSV Datei?

Alles rund um Module und Plugins in CONTENIDO 4.9.
Antworten
benja
Beiträge: 168
Registriert: Mi 31. Aug 2005, 10:54
Wohnort: Köln
Kontaktdaten:

Formular-Assistent: Inhalte als CSV Datei?

Beitrag von benja » Mo 9. Sep 2013, 12:05

Hallo,

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

LG
Benja

marcus.gnass_4fb
Beiträge: 87
Registriert: Do 26. Apr 2012, 23:02
Kontaktdaten:

Re: Formular-Assistent: Inhalte als CSV Datei?

Beitrag von marcus.gnass_4fb » Mo 9. Sep 2013, 20:12

Ja, ist es. Das habe ich auch bereits für ein Kundenprojekt so realisiert.

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:

Code: Alles auswählen

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. :oops: )

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:

Code: Alles auswählen

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.

Nun endlich zu deiner Anforderung :D

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.

Ich hoffe ich konnte etwas Licht ins Dunkel des PIFA bringen . :D

benja
Beiträge: 168
Registriert: Mi 31. Aug 2005, 10:54
Wohnort: Köln
Kontaktdaten:

Re: Formular-Assistent: Inhalte als CSV Datei?

Beitrag von benja » Mi 11. Sep 2013, 10:13

Vielen Dank für die ausführliche Info. Ich fürchte aber meine Programmierkenntnisse reichen hier nicht aus. Was würde so eine Umsetzung kosten? Kann mir dazu jemand ein Angebot machen?

LG
Benja

Antworten