mobizel/sylius-export-plugin

批量导出 Sylius 资源

安装次数: 14,866

依赖项: 0

建议者: 0

安全性: 0

星标: 2

关注者: 4

分支: 1

开放问题: 22

类型:sylius-plugin


README

Mobizel 导出插件

入门

此插件为所有 Sylius 资源添加了一个新的批量操作 'export'。
它使用默认的资源网格定义来导出数据。
您还可以使用特定的网格进行导出。

它允许您导出

  • 所有实体
  • 通过搜索过滤的所有实体
  • 选定的实体(带复选框)

重要提示:此插件不依赖于 sylius/sylius,而仅依赖于 sylius/resource-bundlesylius/grid-bundle,因此可以在其他项目(如 symfony starter monofony)中使用。

安装

  1. 要求和安装插件
  • 运行 composer require mobizel/sylius-export-plugin
  1. 注册包

=> 如果您不使用 symfony/flex,则必须在 Kernel 中导入插件。

<?php

// config/bundles.php

return [
    // ...
   Mobizel\SyliusExportPlugin\MobizelSyliusExportPlugin::class => ['all' => true],
];

配置

网格配置

如果不存在,则创建文件 config/packages/sylius_grid.yaml 并添加新的批量操作

sylius_grid:
    templates:
        bulk_action:
            export: "@MobizelSyliusExportPlugin/Admin/Grid/BulkAction/export.html.twig"

添加新的按钮宏

添加以下文件以添加新的按钮宏。

# templates/bundles/SyliusUiBundle/Macro/buttons.html.twig

{% extends "@!SyliusUi/Macro/buttons.html.twig" %}

{% macro bulkExport(url, message, labeled = true) %}
    <form action="{{ url }}" method="post" id="bulk-export">
        <a class="ui red {% if labeled %}labeled {% endif %}icon button not_disabled" type="submit" href="#">
            <i class="icon download"></i> {{ ((message is empty and labeled) ? 'sylius.ui.export' : message)|trans }}
        </a>
    </form>
{% endmacro %}

JavaScript 集成

vendor/mobizel/sylius-export-plugin/src/Resources/public/js/bulk-export.js 集成到您的 JavaScript 构建中(webpack / gulp)或直接在 twig 中(您需要将文件复制到您的资产目录)

Twig 集成示例

<script src="{{ asset('bundles/mobizelsyliusexportplugin/js/bulk-export.js') }}"></script>

如何使用它

示例

您只需将导出批量操作添加到网格中,例如在客户网格中,创建文件 config/grids/admin/customer.yaml 以覆盖客户的网格

sylius_grid:
    grids:
        sylius_admin_customer:
            actions:
                bulk:
                    export:
                        type: export

接下来,启用您的网格。
编辑 config/packages/sylius_grid.yaml 并在顶部添加

imports:
  - { resource: '../grids/admin/customer.yaml' }

如何启用选定实体的导出

选定实体的导出默认情况下不工作。您需要重写实体存储库。
客户示例

  • 创建 CustomerRepository 类
<?php
declare(strict_types=1);

namespace Tests\Mobizel\SyliusExportPlugin\Application\src\Repository;

use Doctrine\ORM\QueryBuilder;
use Sylius\Bundle\CoreBundle\Doctrine\ORM\CustomerRepository as BaseCustomerRepository;

class CustomerRepository extends BaseCustomerRepository
{
    public function createListQueryBuilderFilteredByIds(?array $ids): QueryBuilder
    {
        $queryBuilder = $this->createQueryBuilder('o');

        if (null !== $ids && count($ids) > 0) {
            $queryBuilder
                ->andWhere($queryBuilder->expr()->in('o.id', ':ids'))
                ->setParameter('ids', $ids);
        }

        return $queryBuilder;
    }
}

注意:我们添加了新方法来通过 id 获取实体

  • 如果不存在,则创建文件 config/packages/sylius_customer

  • 在此文件中设置自定义存储库

sylius_customer:
    resources:
        customer:
            classes:
                repository: Repository\CustomerRepository
  • 更新客户网格以使用新方法
sylius_grid:
    grids:
        sylius_admin_customer:
            driver:
                options:
                    class: "%sylius.model.customer.class%" OR App\Entity\Customer\Customer
                    repository:
                        method: createListQueryBuilderFilteredByIds
                        arguments:
                            - $ids

完整文件

sylius_grid:
    grids:
        sylius_admin_customer:
            driver:
                options:
                    class: "%sylius.model.customer.class%" OR App\Entity\Customer\Customer
                    repository:
                        method: createListQueryBuilderFilteredByIds
                        arguments:
                            - $ids
            actions:
                bulk:
                    export:
                        type: export

如何使用自定义网格

如果您在导出实体时想要使用自定义网格,只需覆盖路由并指定网格参数即可,例如客户示例

sylius_backend_customer_bulk_export:
    path: /customers/bulk-export
    methods: [POST]
    defaults:
        _controller: sylius.controller.customer:exportAction
        _sylius:
            grid: my_custom_grid
        ...

自定义导出格式

此插件仅使用 CSV 进行导出,但是您可以实现自己的导出。创建一个实现 Mobizel\SyliusExportPlugin\Exporter\ResourceExporterInterface 的新类。

如果您创建了一个具有方法的 XmlResourceExport

    public function getFormat(): string
    {
        return 'xml';
    }

您可以在路由定义中更改导出格式

sylius_backend_customer_bulk_export:
    path: /customers/bulk-export
    methods: [POST]
    defaults:
        _controller: sylius.controller.customer:exportAction
        _sylius:
            grid: my_custom_grid
            vars:
                export_format: xml
        ...

CSV 设置

您可以配置 CSV 编写器的设置。

# config/packages/mobizel_sylius_export.yaml

mobizel_sylius_export:
    csv_settings:
        delimiter: ';'

贡献

想要帮助我们吗?请随时提交 pull-request!

许可证

Sylius 导出插件完全免费,并按照 MIT 许可证发布。

作者

Sylius 导出插件最初由 Kévin REGNIER 创建。