wReadWrite::writeFileCSVArray

Schreibt einen Datensatz bzw. Datensätze in eine CSV-Datei
(verfügbar ab CMS-Version 017.002.110.000)

Funktionsaufruf

Boolean writeFileCSVArray(String filePath, Array csvData, Array option = array())

Parameter

filePath
Pfad der Datei
csvData
Assoziatives Array, das die Datensätze enthält.
option
archiveIfHeaderChanged - true - Schreibt ein neues File, wenn sich der CSV-Head verändert. (empfohlen bei Formularen);

Diese Funktion ermöglicht es Daten in eine CSV-Datei abzuspeichern.

Existiert die CSV-Datei nicht, wird diese angelegt. Die Grundlage für die Spaltennamen (csvHead) bilden die Keys des (ersten) assoziativen Arrays. Existiert die CSV-Datei, werden die Daten aus der ersten Zeile als csvHead angenommen.

Bevor die Datensätze geschrieben werden, werden diese anhand des csvHead sortiert. Daten die in dem Array $csvData fehlen werden leer aufgefüllt. Zusätzliche Daten, also Daten deren Spaltennamen nicht im csvHead enthalten sind, werden am Ende in die Zeile geschrieben. (siehe 'Schreiben mehrerer CSV Zeilen')

Seit Version (017.002.175.000) wird die Option archiveIfHeaderChanged=true unterstützt. Ist diese Option aktiviert wird bei einem veränderten Header in den csvDaten die bestehende Datei archiviert (Dateiname_timestamp) und die restlichen Daten mit dem neuen Header geschrieben. Das ist dann von Vorteil, wenn Formulardaten geschrieben werden, und das Formular durch den Redakteur erweitert oder verändert wurde. 
Damit ist sichergestellt, dass bestehende Daten nicht überschrieben werden. 

Arrays die in den Daten mitgegeben werden, werden mit Pipe-Getrennt gespeichert. 

Bitte beachten Sie, dass die CSV-Datei bereits schon einen vollständigen csvHead hat oder für den ersten Eintrag alle notwendigen Keys initialisiert sind. Andernfalls empfehlen wir die option archiveIfHeaderChanged=true zu setzen.

Bitte beachten Sie beim Einsatz dieser Funktion datenschutzrechtliche Aspekte beim Schreiben personenbezogener Daten!

Bitte beachten Sie, dass für externe Tabellenkalkulations-Programme für die richtige Anzeige bei mehrzeiligen Inhalten ggf. das Trennzeichen " berücksichtigt werden muss.

Beispiel: Formulardaten in eine CSV Schreiben - Varianten für das Schreiben von Inhalten

Quelltext

<?php

/*
* Daten die Sie nicht schreiben möchten, sollten Sie mit unset löschen.
*/

//Formulardaten aus einem Anfrageformular mit Veranstaltungen
$mailData['name'] = 'Peter Mustermann';
$mailData['email'] = 'mustermann@domain.dd';
$mailData['dates'] = array('10.02.2023', '15.3.2024');
$mailData['message'] = 'Bitte machen Sie mir nähere Angaben zu den Terminen:
10.02.2023
15.03.2023'
;
$mailData['wFormData'] = 'Title: [!--title--]
Name: [!--name--]
E-Mail: [!--email--]
dates: [!--dates--]
Mitteilung: [!--message--]
datenschutz-akzeptiert: [!--datenschutz-akzeptiert--]'
;


$filePath = '/[ASSETSPROJECT]/csvLists/'.wStringconverter::convertToFileName($mailData['subject']).'.csv';
$csvData = $mailData;
//Löschen von Daten die nicht in die CSV geschrieben werden sollen
unset($csvData['wFormData']);

wReadWrite::writeFileCSVArray($filePath, $csvData, array('archiveIfHeaderChanged'=> true));

//Sperrt das Verzeichnis über eine .htaccess-Datei
wRepository::protectDir(wPathName::getDirFile($filePath));

?>

Beispiel: Schreiben einer CSV Zeile

Quelltext

<?php

$data
['id'] = rand(0,500);
$data['title'] = 'Herr';
$data['surname'] = 'Mustermann';

$filePath = '/[ASSETSPROJECT]/csvLists/data.csv';
wReadWrite::writeFileCSVArray($filePath, $data);

/*Ergebnis CSV
id;title;surname
3;Herr;Mustermann
*/


?>

Beispiel: Schreiben mehrerer CSV Zeilen

Quelltext

<?php

/*Existiert die csv-Datei nicht müssen zumindest für
1. Datensatz die Keys vollständig definiert werden*/
$data[0]['id'] = rand(0,500);
$data[0]['title'] = 'Herr';
$data[0]['surname'] = 'Mustermann';

$data[1]['id'] = rand(0,500);
$data[1]['title'] = 'Frau';
$data[1]['surname'] = 'Mustermann';

/*Datensatz unvollständig*/
$data[2]['id'] = rand(0,500);
$data[2]['surname'] = 'Mustermann';

/*Datensatz zusätzlicher key*/
$data[3]['id'] = rand(0,500);
$data[3]['surname'] = 'Mustermann';
$data[3]['street'] = 'Musterstraße';

$filePath = '/[ASSETSPROJECT]/csvLists/data.csv';
wReadWrite::writeFileCSVArray($filePath, $data);


/*Ergebnis CSV
id;title;surname
3;Herr;Mustermann
5;Frau;Mustermann
1;;Mustermann
90;;Mustermann;Musterstraße
*/

?>

Beispiel: Shop, Bestellungen in ein CSV-File schreiben

Quelltext

<?php

//Geneieren einer Warenkorb bzw. Bestell-Id
$mailData['cart_id'] = md5(rand(1000000, 9999999).time());
$filePath = '/[ASSETSPROJECT]/csvLists/orders/'.$mailData['cart_id'].'.csv';

//Auslesen der Warenkorbeinträge
$cartData = wMyShop::prepareCartData();

wReadWrite::writeFileCSVArray($filePath, $cartData['cartEntries']);

?>

Hinweis
Beim Einsatz von Framework-Funktionen in eigenen Skripten beachten Sie bitte den Artikel "So verwenden Sie das PHP-Framework in eigenen Scripten".
Wenn Sie eine Funktion innerhalb einer Weblication® Seite z.B. über das PHP-Quelltext Element oder in einem XSL-Template über wsl:php einbinden, muss das Framework über die grid.php nicht mehr referenziert werden.