2017 © Pedro Peláez
 

contao-module export_table

Export Contao tables to csv- or xml-file.

image

markocupic/export_table

Export Contao tables to csv- or xml-file.

  • Monday, April 9, 2018
  • by markocupic
  • Repository
  • 1 Watchers
  • 1 Stars
  • 239 Installations
  • PHP
  • 3 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 12 Versions
  • 13 % Grown

The README.md

Markoo Cupic Logo, (*1)

Export Table für Contao CMS

Mit dieser Erweiterung lassen sich aus dem Contao Backend heraus Datenbank-Tabellen ins CSV- oder XML-Format exportieren. Dabei kann der Export konfiguriert werden. - Export-Typ auswählen (CSV/XML) - Tabelle auswählbar - Felder auswählbar - Kopfzeile ja/nein - Über die Eingabe eines json-Arrays Datensätze filtern - Ausgabe sortierbar (Feldname und Richtung) - Delimiter einstellbar (Default: ;) - Enclosure einstellbar (Default: ") - BOM (für korrekte Darstellung von UTF-8 codierten Zeichen in MS Excel) - Trennzeichen für Arrays einstellbar - Deeplink Support - Speicher-Verzeichnis wählbar - Dateiname wählbar - Extension mit HOOKS und weiteren Writern erweiterbar, (*2)

Backend, (*3)

Der Einsatz von Filtern

Der Export ist über Filter konfigurierbar., (*4)

Folgender einfacher Filter für die Mitgliedertabelle tl_member lässt nur Frauen aus Luzern zu:\ [["gender=? AND city=?"],["female","Luzern"]], (*5)

Oder nur Frauen aus Luzern oder Bern:\ [["gender=? AND (city=? OR city=?)"],["female","Luzern", "Bern"]], (*6)

Oder alle Mitglieder aus der Mitgliedergruppe mit der ID 3: [["tl_member.groups LIKE '%:\"3\";%' AND id > ?"],["0"]], (*7)

Auch der Gebrauch von Contao Insert Tags ist möglich:\ [["lastname=? AND city=?"],["{{user::lastname}}","Oberkirch"]], (*8)

Oder Parameterübergabe aus der URL:\ [["lastname=? AND city=?"],["{{GET::lastname}}","Oberkirch"]], (*9)

Für Entwickler: Die Ausgabe über den "exportTable" HOOK steuern

Via Hook kann die Ausgabe angepasst werden. Die Erweiterung selber nutzt diese Hooks. Beispielsweise werden timestamps vie exportTable Hook zu formatierten Daten umgewandelt. Bereits vorhandene Hooks lassen sich über einen eigenen Hook deaktivieren. Dabei muss die Priority so eingestellt werden, dass der neue Hook vor dem bestehenden aufgerufen wird.\ Siehe siehe dieses Beispiel:, (*10)

HOOK
exportTable
exportTablePreWrite
exportTablePostWrite

ExportTable aus eigenem Controller heraus nutzen

Die ExportTable-Klasse lässt sich recht simpel auch aus anderen Erweiterungen heraus nutzen., (*11)

Dazu muss als Erstes der Export konfiguriert werden. Als Konstruktor-Argument wird der Konfigurationsklasse der Name der zu exportierenden Tabelle übergeben. Mit dieser Minimalkonfiguration werden die Default-Einstellungen übernommen. Ein Beispiel mit einer etwas ausführlicheren Konfiguration findest du weiter unten., (*12)

$config = new Config('tl_member');

Der eigentliche Export-Service wird mit der Methode $this->exportTable->run($objConfig) aufgerufen, welche als einzigen Parameter das vorher erstellte Config-Objekt erwartet., (*13)

$config = new Config('tl_member');
$config->setOutputBom(ByteSequence::BOM['UTF-8']);

return $this->exportTable->run($config);

Hier ein etwas ausführlicheres Beispiel eingebettet in einem Custom Controller., (*14)

// App/Controller/CustomController.php

declare(strict_types=1);

namespace App\Controller;

use Contao\CoreBundle\Exception\ResponseException;
use Contao\CoreBundle\Framework\ContaoFramework;
use Contao\FilesModel;
use Markocupic\ExportTable\Config\Config;
use Markocupic\ExportTable\Export\ExportTable;
use Markocupic\ExportTable\Writer\ByteSequence;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

#[Route('/_test_export', name: CustomController::class, defaults: ['_scope' => 'frontend', '_token_check' => false])]
class CustomController extends AbstractController
{

    public function __construct(
        private ContaoFramework $framework,
        private ExportTable $exportTable,
    ){
    }

    public function __invoke(): Response
    {
        $this->framework->initialize();

        // First you have to config your data export.
        $config = (new Config('tl_member'))
            ->setExportType('csv')
            ->setFields(['firstname', 'lastname', 'dateOfBirth'])
            ->setAddHeadline(true)
            ->setHeadlineFields(['Vorname', 'Nachname', 'Geburtsdatum'])
            ->setDelimiter(',')
            ->setEnclosure('"')
            // Select * FROM tl_member WHERE tl_member.city = 'Oberkirch'
            ->setFilter([["city=?"],["Oberkirch"]])
            // Save the file to the Contao filesystem
            ->setSaveExport(true)
            // Define a target path, otherwise the file will be temporarily stored in system/tmp
            ->setSaveExportDirectory(FilesModel::findByPath('files')->uuid)
            // Define a filename, otherwise the file will become the name of the table ->tl_member.csv
            ->setFilename('export.csv')
            // Add BOM (correct display of UTF8 encoded chars in MS-Excel)
            ->setOutputBom(ByteSequence::BOM['UTF-8'])
            // Use the row callback to manipulate records
            ->setRowCallback(
                static function ($arrRow) {
                    foreach($arrRow as $fieldName => $varValue)
                    {
                        $arrRow[$fieldName] = doSomething($varValue);
                    }
                    return $arrRow;
                }
            )
            //->convertEncoding(true, 'UTF-8', 'ISO-8859-1');
        ;

        // The export class takes the config object as single parameter.
        return $this->exportTable->run($config);
    }
}

Erstellen eines Custom-Exporter-Services

Falls die beiden Standard-Writer (CSV und XML) nicht genügen sollten, ist es ohne weiteres möglich einen weiteren Writer hinzuzufügen. Dazu muss eine Writer Klasse geschrieben werden, die das Markocupic\ExportTable\Writer\WriterInterface implementiert. In services.yaml muss die Klasse mit name: markocupic_export_table.writer getaggt werden. Der Alias sollte eindeutig sein und nicht bereits verwendet worden sein. Z.B. alias: my_custom_csv, (*15)


# Inject Custom CSV writer into Markocupic\ExportTable\Export\ExportTable and Markocupic\ExportTable\DataContainer\ExportTable during compilation App\ExportTable\Writer\CustomXmlWriter: tags: - { name: markocupic_export_table.writer, alias: xml, verbose_name: Custom xml exporter class }

Viel Spass mit Export Table!, (*16)

The Versions

09/04 2018

dev-master

9999999-dev

Export Contao tables to csv- or xml-file.

  Sources   Download

LGPL-3.0+

The Requires

 

contao export table

09/04 2018

3.0.0

3.0.0.0

Export Contao tables to csv- or xml-file.

  Sources   Download

LGPL-3.0+

The Requires

 

contao export table

09/04 2018

2.0.4

2.0.4.0

Export Contao tables to csv- or xml-file.

  Sources   Download

LGPL-3.0+

The Requires

 

contao export table

29/03 2018

2.0.3

2.0.3.0

Export Contao tables to csv- or xml-file.

  Sources   Download

LGPL-3.0+

The Requires

 

contao export table

11/01 2018

2.0.2

2.0.2.0

Export Contao tables to csv- or xml-file.

  Sources   Download

LGPL-3.0+

The Requires

 

contao export table

06/01 2018

2.0.1

2.0.1.0

Export Contao tables to csv- or xml-file.

  Sources   Download

LGPL-3.0+

The Requires

 

contao export table

06/01 2018

2.0.0

2.0.0.0

Export Contao tables to csv- or xml-file.

  Sources   Download

LGPL-3.0+

The Requires

 

contao export table

15/10 2017

1.2.0

1.2.0.0

Export Contao tables to csv- or xml-file.

  Sources   Download

LGPL-3.0+

The Requires

 

contao export table

27/08 2017

1.1.2

1.1.2.0

Export Contao tables to csv- or xml-file.

  Sources   Download

LGPL-3.0+

The Requires

 

contao export table

06/06 2017

1.1.1

1.1.1.0

Export Contao tables to csv- or xml-file.

  Sources   Download

LGPL-3.0+

The Requires

 

contao export table

05/01 2017

1.1.0

1.1.0.0

Export Contao tables to csv- or xml-file.

  Sources   Download

LGPL-3.0+

The Requires

 

contao export table

04/06 2016

1.0.0

1.0.0.0

Export Contao tables to csv- or xml-file.

  Sources   Download

LGPL-3.0+

The Requires

 

contao export table