Hallo liebe Contao Community,
gibt es ein Modul oder eine einfache Möglichkeit um eine erzeugte CSV bzw. XML Formulardatei auch lokal auf dem Server zu speichern?
LG,
Dirk
Hallo liebe Contao Community,
gibt es ein Modul oder eine einfache Möglichkeit um eine erzeugte CSV bzw. XML Formulardatei auch lokal auf dem Server zu speichern?
LG,
Dirk
schau dir mal folgende ERrweiterung an:
http://www.contao.org/erweiterungsli...140009.de.html
Danke für den Tipp. Leider speichert die EFG Erweiterung die Daten in der Datenbank. Die Formulardaten sollten aber beim Absenden als CSV Datei auf dem Server gespeichert werden.
laut wiki ghet das....
http://de.contaowiki.org/EFG#Speiche...ackend-Modulen
Ja schon, aber die Formulardaten werden in der Datenbank gespeichert und ich müsste jedes mal im Backend als CSV exportieren. Ich möchte aber das die Daten eines ausgefüllten Formulares direkt als CSV Datei auf dem Server in einem Ordner gespeichert werden. Zur Verwaltung nutzen wir das Programm Filemaker. Filemaker importiert via FTP Zugang die CSV Datei, welche auf dem Server abgelegt wurde. Soweit der Plan in der Theorie.
Hat niemand eine Idee? Die erzeugte CSV Datei für das Formular soll also nicht per eMail Anhang versendet werden sondern in einem Ordner auf dem Server gespeichert werden.
Du könntest die CSV direkt aus der Datenbank erzeugen. Nur wann ist halt die Frage... bei Submit oder per Cron. Wobei ich beim Submit keine AHnung hab wie man das abfängt ;-)
Die CSV Datei wird ja schon automatisch in Contao erzeugt. Ich möchte sie nur nicht als eMail Anhang erhalten sondern sie automatisiert auf dem Server speichern. Kann man das z.B. über den php Befehl fwrite lösen?
Habs gelöst und per Hook eingebunden
PHP-Code:
public function processFormData($arrPost, $arrForm, $arrFiles)
{
if ($this->format == 'csv')
{
$email=('"' . implode('";"', $keys) . '"' . "\n" . '"' . implode('";"', $values) . '"');
}
$dateiname = time().'.csv'; // Name der Datei
// Datei öffnen,
// wenn nicht vorhanden dann wird die Datei erstellt.
$handler = fOpen($dateiname , "a+");
// Dateiinhalt in die Datei schreiben
fWrite($handler , $email);
fClose($handler); // Datei schließen
}
Hab mich wohl etwas zu früh gefreut. Die Formulareingaben werden nicht in die CSV Datei geschrieben :-(
Hat da jemand einen Tipp?
Es dreht sich sicher um diesen Code hier:PHP-Code:
if ($this->format == 'csv')
{
$email=('"' . implode('";"', $keys) . '"' . "\n" . '"' . implode('";"', $values) . '"');
}
Hat keiner eine Idee wie ich die Formularwerte in meine erzeugte CSV Datei bekomme?
Die CSV Datei wird wie gewünscht mit einem Zeitstempel auf dem Server im Ordner gespeichert. Leider sind keine Werte drin :-( Bin leider nicht der PHP Profi und bin für jede Hilfe dankbar.PHP-Code:
class Service extends Frontend
{
public function processFormData($arrPost, $arrForm, $arrFiles)
{
$verzeichnis = "Formulardaten";
$dateiname = time().'.csv'; // Name der Datei
// Datei öffnen,
// wenn nicht vorhanden dann wird die Datei erstellt.
$handler = fOpen($verzeichnis . "/" . $dateiname , "a+");
// Dateiinhalt in die Datei schreiben
if ($this->format == 'csv')
{
$email = ('"' . implode('";"', $keys) . '"' . "\n" . '"' . implode('";"', $values) . '"');
}
fWrite($handler , $email);
fClose($handler); // Datei schließen
}
}
Hallo dirksche,
Dein Hook wird aus /system/modules/frontend/Form.php [Zeile 436ff.] aufgerufen, und zwar aus der Methode "protected function processFormData($arrSubmitted)". Das ist eine protected Methode, die Ihre Eigenschaften nicht verrät. Deshalb sind weder $this->format noch $keys und $values in Deiner public-Funktion verfügbar. Auch den bereits zusammengebaute CSV-String kannst Du nicht erreichen, den musst Du also leider nochmal generieren.
Dein Code könnte dann in etwa so aussehen:
Bitte achte darauf, dass leere Felder übersprungen werden, wenn dies im Formular aktiviert ist. Dadurch kann Deine CSV-Datei unterschiedliche Felder bekommen, was beim Import in FileMaker dann eine Rolle spielen kann. Außerdem enthalten die Formulardaten auch die Felder FORM_SUBMIT und MAX_FILE_SIZE. Eventuell kannst Du Dir im Code die IF-Condition für das XML-File sparen (löschen).PHP-Code:
class Service extends Form {
public function processFormData($arrPost, $arrForm, $arrFiles) {
foreach ($arrPost as $k=>$v) {
if ($k == 'cc') {
continue;
}
$v = deserialize($v);
// Skip empty fields
if ($arrForm['skipEmpty'] && !is_array($v) && !strlen($v)) {
continue;
}
// Add field to message
$message .= ucfirst($k) . ': ' . (is_array($v) ? implode(', ', $v) : $v) . "\n";
// Prepare XML file
if ($arrForm['format'] == 'xml') {
$fields[] = array
(
'name' => $k,
'values' => (is_array($v) ? $v : array($v))
);
}
// Prepare CSV file
if ($arrForm['format'] == 'csv') {
$keys[] = $k;
$values[] = (is_array($v) ? implode(',', $v) : $v);
}
}
/* Ab hier Dein leicht modifizierter Originalcode */
$verzeichnis = "Formulardaten";
$dateiname = time().'.csv'; // Name der Datei
// Datei öffnen,
// wenn nicht vorhanden dann wird die Datei erstellt.
$handler = fopen($verzeichnis . "/" . $dateiname , "a+");
// Dateiinhalt in die Datei schreiben
$email = ('"' . implode('";"', $keys) . '"' . "\n" . '"' . implode('";"', $values) . '"');
fwrite($handler , $email);
// Datei schließen
fclose($handler); // Datei schließen
}
}
Deine Klasse erweitert die "Form"-Klasse (extends Form). Die Schreibweise für fopen, fwrite und fclose ist all lowercase.
Hallo Attila,
zuerst einmal ein großes Danke für Deine Hilfe :-)
Leider erhalte ich beim Absenden des Formulares nun eine Fehlermeldung. Hab mal davon ein Screenshot erstellt. Vielleicht siehst Du wo der Fehler liegt?
Hallo dirksche,
sorry, da ist wohl doch noch ein Fehler drin, den ich übersehen habe:
Die Klasse Service enthält eine Methode "processFormData", die versucht, die Methode der Elternklasse zu überschreiben (wegen des gleichen Namens). Versuch doch mal, die Methode umzubenennen in "myProcessFormData". Dann musst Du natürlich in Deiner config den Hook entsprechend registrieren:
$GLOBALS['TL_HOOKS']['processFormData'][] = array('Service', 'myProcessFormData');
Wo hast Du denn den Aufruf des Hooks registriert und wo liegt Deine php-Datei? Welche Contao-Version verwendest Du?
Ich habe Dir mal ein ZIP angehängt, das Du entpackt in den Ordner ./system/modules/ Deiner Contao-Installation legen kannst. Damit erziele ich das gewünschte Ergebnis. Dann brauchst Du auch an Deinen Config-Files keine Änderungen mehr durchzuführen. Wichtig ist natürlich, dass Dein Formular im Contao-Formulargenerator auf das Format "CSV" gestellt ist, sonst sendet es nur Rohdaten und die Ausgabe ist leer.
Freue mich über Feedback.
Gruß
Attila
Hi Attila,
nochmals vielen lieben Dank für Deine Mühe. Habe Deine ZIP Datei in meinem System installiert und das Formular wieder getestet. Leider produziert es beim Absenden immer noch eine Fehlermeldung. Habe wieder einen Screenshot beigelegt. Das schreiben der CSV Datei auf dem Server funzt weiterhin gut. Ich verwende Contao 2.9.5 und habe die PHP Datei in einem Ordner "Service" unter .system/modules liegen.
Gruß,
Dirk
Hi dirksche,
ich fürchte, ich kann die Fehlermeldung, die Du bekommst, nicht zuordnen. Meine Contao-Version ist ebenfalls die 2.9.5 und die CSV-Datei wird fehlerfrei geschrieben. Ich bin noch nicht so tief in Contao eingetaucht, als dass ich beurteilen kann, warum der Funktion "Hybrid->__construct()" ein Argument fehlt. Aber offenbar fehlt beim rendern Deiner Seite ein Datenbank-Ergebnis.
Eine letzte Vermutung habe ich noch, aber die ist eher schwach: Möglicherweise musst Du für Deine CSV-Datei einen vollständigen Serverpfad angeben (anstatt nur "Formulardaten"), also z.B. /var/www/web1160/html/unilux/system/Formulardaten oder ähnlich. Allerdings spricht die Tatsache, dass Dein System eine (leere) CSV-Datei schreibt dafür, dass Deine Pfadangabe stimmt.
Eine andere Möglichkeit wäre noch, das Verzeichnis, in das Du schreibst, für Schreib- und Leserechte freizugeben. Das Anlegen der Datei scheint kein Problem zu sein, aber das beschreiben. Evtl. könnte das helfen.
Aber das sind beides eher schwache Argumente, weil Du ja eine Datei in Deinem Verzeichnis bekommst, die nur leider leer ist. Für die genauere Analyse müsste ich mehr von Deinem System sehen, was wahrscheinlich eher unrealistisch ist. Evtl. verhindert eine andere Extension oder eine Einstellung das Beschreiben der Datei.
Falls Du mir vertrauen willst, kannst Du mir gerne Zugansdaten für Dein System (Contao und FTP) per PM senden, dann sehe ich mir das Ganze mal an.
Viele Grüße
Attila
Also mit Filemaker würde das doch viel einfacher gehen... http://bit.ly/zQkIaV
Auch Daten Texte, bereinigen oder beim Austausch in's richtige Format wandeln ist mit plugins von filemaker leicht realisierbar.
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Lesezeichen