generated from leonetienne/LaTeX-Paper-template
feat: wrote csv export
This commit is contained in:
parent
151c2fa7d7
commit
ea1bd4fef1
@ -421,3 +421,40 @@ wie beispielsweise seiner Teilnehmernummer oder seiner Nutzergruppenzugehörigke
|
||||
der Extbase-nativej Domain-Model-FrontendUser-Klasse bedient \cite{bib:typo3-ref-extbase-model-feuser}.
|
||||
|
||||
\subsection{CSV-Export}
|
||||
Das letzte Glied des analogen Prozesses, den es zu digitalisieren gilt, ist der Datenexport der Weindaten je Jahresauswahlprobe.
|
||||
TYPO3s ListView bietet einen nativen CSV-Exporter an \cite{bib:pixelant-typo3-data-export},
|
||||
jedoch kommt dieser nicht den Anforderungen gerecht, da das CSV-Dokument Daten verschiedener Datenbanktabellen im Verein
|
||||
beinhalten muss.
|
||||
Um eine reibungslose Integration in die restlichen Prozesse von Weinland Mosel zu gewährleisten, muss das exportierte CSV
|
||||
das selbe Format haben, wie bisher bestehende Excel-Dateien. Dieses Format ist durch genaue Spaltennamen,
|
||||
Spalteneihenfolgen und den Arten von Daten, die angefragt werden, definiert.
|
||||
Um einen benutzerdefinierten Exporter im Backend bereitzustellen, wird ein Backendmodul registriert, das immer im linken
|
||||
Reitermenü verfügbar ist.
|
||||
Dieses Bankendmodul stellt eine Listenansicht aller Jahresauswahlproben bereit.
|
||||
Restriktionen gibt es hierbei keine, da diese Listenansicht
|
||||
nur im Backend, nur für Administratoren und Redakteure, verfügbar ist.
|
||||
Jeder Listeneintrag ist eine Verlinkung auf eine Detailansicht der jeweiligen Jahresauswahlprobe.
|
||||
Diese Detailansicht ist der CSV-Exporter. Hierfür werden alle Weine aus der Datenbank angefragt,
|
||||
die der jeweiligen Jahresauswahlprobe zugeordnet sind. Zusammenhängende Relationen, wie zum Beispiel Teilnehmerdatensätze,
|
||||
die Attribute dieser Weine sind, werden automatisch von Extbase angefragt \cite{bib:typo3-docs-model-explained}.
|
||||
Das CSV-Dokument wird über die PHP-native Funktion \enquote{fputcsv} generiert. Diese Funktion nimmt einen
|
||||
numerisch indizierten Array und schreibt eine darauf basierende CSV-Zeile in eine Datei \cite{bib:php-fputcsv}.
|
||||
Um gut wartbaren PHP-Code zu erzeugen, werden alle CSV-Zeilen in einem zweidimensionalen Array,
|
||||
der das gesamte CSV-Dokument darstellt,
|
||||
durch alphanumerisch indizierte, innere Arrays abgebildet. Somit ist bei jeder Wertzuweisung der zugehörige Spaltenname ersichtlich.
|
||||
Über die nativen PHP-Funktionen \enquote{array\_keys} und \enquote{array\_values} wird dieser zwar gut lesbare,
|
||||
aber mit \enquote{fputcsv} inkompatibler
|
||||
Array zu einer Reihe kompatibler Array konvertiert. Hierbei werden durch \enquote{array\_values} die Kopfzeile und durch
|
||||
\enquote{array\_values} die Datenzeilen extrahiert. Diese Zeilen werden anschließend mit \enquote{fputcsv}
|
||||
in die Zieldatei geschrieben. Als Zieldatei wird eine temporäre Datei im Arbeitsspeicher angegeben,
|
||||
um das fertig erzeugte CSV-Dokument als Zeichenkette in PHP zu erhalten. Das spart vermeidbare Festplattenschreib- und Lesezugriffe.
|
||||
Im Fluid-Template des Backendmoduls wird das generierte CSV-Dokument in einem nicht beschreibbaren Textarea-Feld präsentiert.
|
||||
Um Weinland Mosel weitere Arbeitszeit zu sparen und somit den Profit zu fördern, wird eine Download-Funktion für CSV-Dateien
|
||||
angeboten. Das erspart das manuelle Kopieren und Abspeichern von CSV-Code von IT-Fachfremden, reduziert damit die Anzahl
|
||||
an benötigten Übergangsschritten in weitere Prozesse und reduziert somit die Komplexität der Umstellung.
|
||||
Auch im Interesse, Arbeitszeit in der Umsetzung zu sparen,
|
||||
wurde diese Downloadfunktion JavaScript-seitig umgesetzt. Dadurch ist der Download in derselben Action implementiert.
|
||||
Somit muss weder abstrahiert werden, noch ein weiterer Exporter gebaut werden.
|
||||
Hierfür wird ein EventHandler auf den Download-Button angewandt, der bei Betätigung ein vestecktes
|
||||
\enquote{a}-Element erstellt, über das \enquote{download}-Attribut den Download-Dateinamen festlegt und als \enquote{href}-Attribut
|
||||
eine Blob-Url zuweist. Diese Blob-Url wird über ein Blob-Objekt generiert \cite{bib:tutorialspoint-js-save-text}.
|
||||
|
@ -360,6 +360,22 @@
|
||||
note = {Zugriff: März 2023}
|
||||
}
|
||||
|
||||
@misc{bib:php-fputcsv,
|
||||
author = {{The PHP Group}},
|
||||
howpublished = "\url{https://www.php.net/manual/de/function.fputcsv.php}",
|
||||
title = {{PHP: fputcsv Manual}},
|
||||
year = {2023},
|
||||
note = {Zugriff: März 2023}
|
||||
}
|
||||
|
||||
@misc{bib:tutorialspoint-js-save-text,
|
||||
author = {Shubham Vora},
|
||||
howpublished = "\url{https://www.tutorialspoint.com/how-to-create-and-save-text-file-in-javascript}",
|
||||
title = {{How to Create and Save text file in JavaScript?}},
|
||||
year = {2022},
|
||||
note = {Zugriff: März 2023}
|
||||
}
|
||||
|
||||
@misc{bib:typo3-fluid,
|
||||
author = {{TYPO3 Association}},
|
||||
howpublished = "\url{https://typo3.org/fluid}",
|
||||
@ -464,6 +480,14 @@
|
||||
note = {Zugriff: März 2023}
|
||||
}
|
||||
|
||||
@misc{bib:typo3-docs-model-explained,
|
||||
author = {{TYPO3 Contributors}},
|
||||
howpublished = "\url{https://docs.typo3.org/m/typo3/reference-coreapi/11.5/en-us/ExtensionArchitecture/Extbase/Reference/Domain/Model.html}",
|
||||
title = {{Model - Typo3 explained 11.5 documentaion}},
|
||||
year = {2023},
|
||||
note = {Zugriff: März 2023}
|
||||
}
|
||||
|
||||
@misc{bib:typo3-ref-standalone-view,
|
||||
author = {{TYPO3 Contributors}},
|
||||
howpublished = "\url{https://api.typo3.org/10.4/class_t_y_p_o3_1_1_c_m_s_1_1_fluid_1_1_view_1_1_standalone_view.html}",
|
||||
@ -479,3 +503,11 @@
|
||||
year = {2023},
|
||||
note = {Zugriff: März 2023}
|
||||
}
|
||||
|
||||
@misc{bib:pixelant-typo3-data-export,
|
||||
author = {{Pixelant}},
|
||||
howpublished = "\url{https://www.typo3manual.com/typo3-basics/tips-and-functions/exporting-data-through-list-view/}",
|
||||
title = {{Tutorial on exporting Data from TYPO3}},
|
||||
year = {2023},
|
||||
note = {Zugriff: März 2023}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user