markocupic / export_table
将Contao数据库表导出为CSV或XML文件。
Requires
- php: ^8.1
- ext-json: *
- ext-xmlwriter: *
- contao/core-bundle: ^4.9 || ^5.0
- league/csv: ^9.8
- ramsey/uuid: ^3.0 || ^4.0
- dev-master
- 5.6.5
- 5.6.4
- 5.6.3
- 5.6.2
- 5.6.1
- 5.6.0
- 5.5.4
- 5.5.3
- 5.5.2
- 5.5.1
- 5.4.1
- 5.3.12
- 5.3.11
- 5.3.10
- 5.3.9
- 5.3.8
- 5.3.7
- 5.3.6
- 5.3.5
- 5.3.4
- 5.3.3
- 5.3.2
- 5.3.1
- 5.3.0
- 5.2.2
- 5.2.1
- 5.2.0
- 5.1.4
- 5.1.3
- 5.1.2
- 4.1.0
- 4.0.4
- 3.3.1
- 3.3.0
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.2
- 3.0.1
- 3.0.0
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.2.0
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.0
- dev-add-code-of-conduct-1
- dev-add-license-1
This package is auto-updated.
Last update: 2024-09-18 11:38:15 UTC
README
Contao CMS的Export Table扩展
使用此扩展,可以从Contao后端将数据库表导出为CSV或XML格式。导出可以配置。
- 选择导出类型(CSV/XML)
- 可选择的表格
- 可选择的字段
- 是否包含标题行
- 通过输入JSON数组过滤数据集
- 可排序输出(字段名和方向)
- 可设置分隔符(默认:;)
- 可设置封装符(默认:")
- 设置BOM(用于在MS Excel中正确显示UTF-8编码的字符)
- 可设置数组分隔符
- 深度链接支持
- 选择存储目录
- 选择文件名
- 通过HOOKS和更多写入器可扩展的扩展名
使用过滤器
导出可以通过过滤器进行配置。
以下简单的过滤器仅允许来自Luzern的tl_member成员表的女性
[["gender=? AND city=?"],["female","Luzern"]]
或仅来自Luzern或Bern的女性
[["gender=? AND (city=? OR city=?)"],["female","Luzern", "Bern"]]
或所有ID为3的成员组的成员:[["tl_member.groups LIKE '%:\"3\";%' AND id > ?"],["0"]]
也可以使用Contao Insert Tags
[["lastname=? AND city=?"],["{{user::lastname}}","Oberkirch"]]
或从URL传递参数
[["lastname=? AND city=?"],["{{GET::lastname}}","Oberkirch"]]
对于开发者:通过"exportTable" HOOK控制输出
通过Hook可以调整输出。扩展本身使用这些Hooks。例如,使用exportTable Hook将时间戳转换为格式化的数据。可以禁用现有的Hooks,此时必须设置Priority以确保新Hook在现有Hook之前被调用。
请参考此示例
从自定义控制器中利用ExportTable
ExportTable类也可以相对简单地从其他扩展中利用。
首先需要配置导出。将导出表的名称作为构造函数参数传递给配置类。使用此最小配置将采用默认设置。下面是一个更详细的配置示例。
$config = new Config('tl_member');
通过方法$this->exportTable->run($objConfig)
调用实际的导出服务,该方法期望一个之前创建的配置对象作为唯一参数。
$config = new Config('tl_member');
$config->setOutputBom(ByteSequence::BOM['UTF-8']);
return $this->exportTable->run($config);
以下是在自定义控制器中嵌入的更详细示例。
// 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); } }
创建自定义导出服务
如果两个标准写入器(CSV和XML)不足以满足需求,可以轻松添加另一个写入器。必须编写一个实现Markocupic\ExportTable\Writer\WriterInterface
的Writer类。在services.yaml
中,必须使用name: markocupic_export_table.writer
标记该类。别名应该是唯一的且未被使用过。例如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 }
祝您使用Export Table愉快!