markocupic/export_table
Composer 安装命令:
composer require markocupic/export_table
包简介
Export Contao database tables to CSV- or XML-files.
README 文档
README
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
Der Einsatz von Filtern
Der Export ist über Filter konfigurierbar.
Folgender einfacher Filter für die Mitgliedertabelle tl_member lässt nur Frauen aus Luzern zu:
[["gender = ? AND city = ?"],["female","Luzern"]]
Oder nur Frauen aus Luzern oder Bern:
[["gender = ? AND (city = ? OR city = ?)"],["female","Luzern","Bern"]]
Oder mit benannten Platzhaltern (named placeholders):
[["gender = :gender AND (city = :city_A OR city = :city_B)"],{"gender":"male","city_A":"Luzern","city_B":"Bern"}]
Oder alle Mitglieder aus der Mitgliedergruppe mit der ID 3:
[["tl_member.groups LIKE '%:\"3\";%' AND id > ?"],["0"]]
Auch der Gebrauch von Contao Insert Tags ist möglich:
[["lastname = ? AND city = ?"],["{{user::lastname}}","Oberkirch"]]
Oder Parameterübergabe aus der URL:
[["lastname = ? AND city = ?"],["{{GET::lastname}}","Oberkirch"]]
Für Entwickler: Die Ausgabe über EventListener oder den "exportTable" HOOK steuern
QueryBuilderPreparedEvent - Datenbank Query anpassen
Der QueryBuilderPreparedEvent ermöglicht es dir, Datenbank-Queries vor ihrer Ausführung anzupassen. Dies ist nützlich, um zusätzliche Bedingungen, Filter oder andere Modifikationen auf Query-Builder-Ebene vorzunehmen.
Erstelle dazu einen Event Listener. Siehe QueryBuilderPreparedListener
Via Hooks kann die Ausgabe transformiert/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:
| HOOK |
|---|
| exportTable |
| exportTablePreWrite |
| exportTablePostWrite |
ExportTable aus eigenem Controller heraus nutzen
Die ExportTable-Klasse lässt sich recht simpel auch aus anderen Erweiterungen heraus nutzen.
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.
$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.
$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.
// 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
# 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!
markocupic/export_table 适用场景与选型建议
markocupic/export_table 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 9.09k 次下载、GitHub Stars 达 5, 最近一次更新时间为 2016 年 05 月 22 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「xml」 「csv」 「export」 「contao」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 markocupic/export_table 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 markocupic/export_table 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 markocupic/export_table 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Bulk export of sylius resources
Load DOM document safety
Yii2 export extension
laravel facade to read/write csv file
A simple API extension for SplFileObject
Collection of tools to use the full power of the Enyalius framework
统计信息
- 总下载量: 9.09k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 6
- 点击次数: 13
- 依赖项目数: 4
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2016-05-22

