Contao

Contao Extended Form Generator - Frontend Excel Export

Der erste Post seit längerer Zeit und mal in Deutsch und ausserdem in der neuen Oberfläche, da wir ja mittlerweile auf Serendipity gewechselt sind.

Es geht um eine einfache Sache: Im CMS Contao existiert eine Erweiterung mit dem Namen Extended Form Generator, oder kurz “EFG”, welche sehr nützlich ist, wenn es darum geht Formulardaten zu speichern und E-Mails mit den Inhalten des Formulars zu versenden, auch an denjenigen der das Formular ausgefüllt hat.

Darüber hinaus existiert eine Funktion zum exportieren von den Datensätzen in CSV oder Excel, per Default im Backend aktiviert. Diese kann auch im Frontend aktiviert werden, allerdings wird dort per Default nur der CSV-Export angezeigt, was mich etwas störte. Im folgenden also der kurze Trick zum aktivieren des Excel-Exports im Frontend. Die Exportfunktion selbst wird im Modul angegeben, wie dies auch schon im Manual steht. Dort steht allerdings nur der CSV-Export zur Verfügung. Warum dem so ist, weiss ich nicht genau, aber vermute mal, dass der Autor davon ausgegangen ist, dass im Frontend unterschiedliche Clients zugreifen können und nicht alles Microsofts Excel installiert haben. CSV ist also daher die saubere Variante.

Dachte ich auch zuerst, bis ich herausfand, dass es nicht ganz so einfach ist, wenn es um Telefonnummern geht, welche in die Liste eingetragen werden. Dort besteht die Möglichkeit in unterschiedlichen Formatierungen zu arbeiten. Manche schreiben die Nummer mit +41 und Leerzeichen, andere mit 0041 mit und ohne Leerzeichen, etc. Die Kombinationen sind meistens gut gemixt, das hat eine Stichprobe von rund 8 Einträgen schon gezeigt. Microsofts Excel ist dann beim Import so schlau und versucht Datentypen zu erraten. Und obwohl alles korrekt encodiert ist, werden die Telefonnummern bis auf’s Unkenntlichste verrisse. Z.B. wir aus +3500000000 schlauerweise 3.5E9 oder so… nicht gerade hilfreich. Die Lösung ist also direkt in Excel zu exportieren, dann werden die Zellen richtig geschrieben und die Formatierung bleibt auch gleich schön. Doch wie ins Frontend kriegen?

An und für sich nicht schwierig:

Modul erstellen und gewünschtes Template zur Darstellung auswählen, alles so konfigurieren wie es sein muss und speichern. Modul in Artikel einfügen und ggf. Benutzerrechte setzen, speichern. Ergebnis: Modul läuft. CSV-Export auch.

CSV Export in Excel-Export umwandeln

*Im Backend das Template für die Darstellung suchen/anlegen (unter Punkt Layouts > Templates)

Beim Template die folgende Zeile ändern:

   <br>
   <?php if ($this->exportable): ?><br>
   <!-- indexer::stop --><br>
   <div class="list_export"><br>
   <form action="<?php echo $this->action; ?>" method="get"><br>
   <div class="formbody"><br>
   <input type="hidden" name="order_by" value="<?php echo $this->order_by; ?>" /><br>
   <input type="hidden" name="sort" value="<?php echo $this->sort; ?>" /><br>
   <input type="hidden" name="search" value="<?php echo $this->search; ?>" /><br>
   <input type="hidden" name="for" value="<?php echo $this->for; ?>" /><br>
   <input type="hidden" name="per_page" value="<?php echo $this->per_page; ?>" /><br>
   <strong><input type="hidden" name="act" value="exportxls" /></strong><br>
   <input type="submit" class="submit" value="<?php echo $this->textlink_export[0]; ?>" /><br>
   </div><br>
   </form><br>
   </div><br>
   <!-- indexer::continue --><br>

Der Originalwert steht auf “export” und nicht auf “exportxls”. Der Parameter wird dann so durch das Form in die URL übergeben und ist somit demjenigen aus dem Backend ähnlich, bzw. der Part im URL mit &act=exportxls ist dann identisch und verursacht, dass ein XLS-File als Download initiiert wird.

Es ist jedoch darauf zu achten dass die Extension efgExcel nicht mit dieser Methode im Frontend kompatibel ist. Sie muss deaktiviert oder deinstalliert werden (die Extension).