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}.
|
der Extbase-nativej Domain-Model-FrontendUser-Klasse bedient \cite{bib:typo3-ref-extbase-model-feuser}.
|
||||||
|
|
||||||
\subsection{CSV-Export}
|
\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}
|
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,
|
@misc{bib:typo3-fluid,
|
||||||
author = {{TYPO3 Association}},
|
author = {{TYPO3 Association}},
|
||||||
howpublished = "\url{https://typo3.org/fluid}",
|
howpublished = "\url{https://typo3.org/fluid}",
|
||||||
@ -464,6 +480,14 @@
|
|||||||
note = {Zugriff: März 2023}
|
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,
|
@misc{bib:typo3-ref-standalone-view,
|
||||||
author = {{TYPO3 Contributors}},
|
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}",
|
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},
|
year = {2023},
|
||||||
note = {Zugriff: März 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