3brs/sylius-zasilkovna-plugin

Sylius 的 Zasilkovna 插件


README

Zásilkovna 插件

Zásilkovna / Zásielkovňa / Csomagküldő / Przesyłkownia / Coletăria

功能

  • 允许通过 [cz] [pl] [sk] [hu] [ro] 向 Zasilkovna 分支或通过 Zasilkovna 服务发送到客户地址。
  • 用户可以在结账过程中的运货步骤中从地图中选择 Zásilkovna 分支。
  • 在最终结账步骤和后台面板中都可以看到 Zásilkovna 分支。
  • 导出带有 Zasilkovna 运货的 CSV(无论是到 Zasilkovna 分支还是客户地址),并轻松将其导入到 Zasilkovna 系统中。

安装

  1. 运行 $ composer require 3brs/sylius-zasilkovna-plugin

  2. 将插件类添加到您的 config/bundles.php

    return [
       ...
       ThreeBRS\ShipmentExportPlugin\ThreeBRSSyliusShipmentExportPlugin::class => ['all' => true],
       ThreeBRS\SyliusZasilkovnaPlugin\ThreeBRSSyliusZasilkovnaPlugin::class => ['all' => true],
    ];
  3. 将资源添加到 config/packeges/_sylius.yaml

    imports:
         ...
         ...
         - { resource: "@ThreeBRSSyliusZasilkovnaPlugin/Resources/config/resources.yml" }
  4. 将路由添加到 config/_routes.yaml

    threebrs_sylius_shipment_export_plugin:
        resource: '@ThreeBRSSyliusShipmentExportPlugin/Resources/config/routing.yml'
        prefix: /admin
  5. 您的实体 Shipment 必须实现 \ThreeBRS\SyliusZasilkovnaPlugin\Model\ZasilkovnaShipmentInterface。您可以使用 trait \ThreeBRS\SyliusZasilkovnaPlugin\Model\ZasilkovnaShipmentTrait

    <?php 
    
    declare(strict_types=1);
    
    namespace App\Entity\Shipping;
    
    use Doctrine\ORM\Mapping as ORM;
    use ThreeBRS\SyliusZasilkovnaPlugin\Model\ZasilkovnaShipmentInterface;
    use ThreeBRS\SyliusZasilkovnaPlugin\Model\ZasilkovnaShipmentTrait;
    use Sylius\Component\Core\Model\Shipment as BaseShipment;
    
    /**
     * @ORM\Entity
     * @ORM\Table(name="sylius_shipment")
     */
    class Shipment extends BaseShipment implements ZasilkovnaShipmentInterface
    {
        use ZasilkovnaShipmentTrait;
    }
  6. 您的实体 ShippingMethod 必须实现 \ThreeBRS\SyliusZasilkovnaPlugin\Model\ZasilkovnaShipmentInterface。您可以使用 trait \ThreeBRS\SyliusZasilkovnaPlugin\Model\ZasilkovnaShipmentTrait

    <?php 
    
    declare(strict_types=1);
    
    namespace App\Entity\Shipping;
    
    use Doctrine\ORM\Mapping as ORM;
    use ThreeBRS\SyliusZasilkovnaPlugin\Model\ZasilkovnaShippingMethodInterface;
    use ThreeBRS\SyliusZasilkovnaPlugin\Model\ZasilkovnaShippingMethodTrait;
    use Sylius\Component\Core\Model\ShippingMethod as BaseShippingMethod;
    
    /**
     * @ORM\Entity
     * @ORM\Table(name="sylius_shipping_method")
     */
    class ShippingMethod extends BaseShippingMethod implements ZasilkovnaShippingMethodInterface
    {
        use ZasilkovnaShippingMethodTrait;
    }
  7. @ThreeBRSSyliusZasilkovnaPlugin/Admin/ShippingMethod/:zasilkovnaForm.html.twig 包含到 @SyliusAdmin/ShippingMethod/_form.html.twig 中。

    ...	
    {{ include('@ThreeBRSSyliusZasilkovnaPlugin/Admin/ShippingMethod/_zasilkovnaForm.html.twig') }}
  8. @ThreeBRSSyliusZasilkovnaPlugin/Shop/Checkout/SelectShipping/_zasilkovnaChoice.html.twig 包含到 @SyliusShop/Checkout/SelectShipping/_choice.html.twig 中。

    ...
    {{ include('@ThreeBRSSyliusZasilkovnaPlugin/Shop/Checkout/SelectShipping/_zasilkovnaChoice.html.twig') }}
  9. @SyliusShop/Common/_address.html.twig 中将 {% include '@SyliusShop/Common/_address.html.twig' with {'address': order.shippingAddress} %} 替换为 {{ include('@ThreeBRSSyliusZasilkovnaPlugin/Shop/Common/Order/_addresses.html.twig') }}

  10. @SyliusAdmin/Common/_address.html.twig 中将 {% include '@SyliusAdmin/Common/_address.html.twig' with {'address': order.shippingAddress} %} 替换为 {{ include('@ThreeBRSSyliusZasilkovnaPlugin/Admin/Common/Order/_addresses.html.twig') }}

  11. @ThreeBRSSyliusShipmentExportPlugin/_row.html.twig 中覆盖模板。

    {% extends '@!ThreeBRSSyliusShipmentExportPlugin/_row.html.twig' %}
    
    {% block address %}
       {% if row.zasilkovna %}
            {{ include('@ThreeBRSSyliusZasilkovnaPlugin/_exporterRow.html.twig') }}
       {% else %}
           {{ parent() }}
       {% endif %}
    {% endblock %}
  12. 创建并运行 doctrine 数据库迁移。

有关如何使用自己的实体的指南,请参阅 Sylius 文档 - 自定义模型

用法

  • 对于发送到 Zasilkovna 分支的配送,在后台面板中创建新的配送方式,设置 Zásilkovna API 密钥 并留空 承运商 ID
  • 对于发送到客户地址的配送,在后台面板中创建新的配送方式,设置 承运商 ID 并留空 Zásilkovna API 密钥
  • 如果您需要根据国家过滤地图中的点,请使用 在地图中仅显示特定国家的取货点。如果留空,将显示所有支持国家中的所有点。
  • 对于代码为 'zasilkovna' 的配送方式,将生成 Zásilkovna CSV 导出,您可以在参数中更改此设置,它是一个数组(因此可以包含多个代码,例如,如果您需要为不同的国家提供不同的价格,您将需要更多的配送方式;始终使用相同的 API 密钥是可以的)
    parameters:
        shippingMethodsCodes: ['zasilkovna']
    您应该将这两种方法都添加到该数组中,包括发送到 Zasilkovna 分支和通过 Zasilkovna 服务发送到客户地址的方法。
  • Packeta API 文档:https://docs.packetery.com/03-creating-packets/01-csv-import.html
  • 您可以通过参数扩展国家列表。
    parameters:
      threebrs_sylius_zasilkovna_plugin_payment_methods: ['cz', 'pl', 'sk', 'hu', 'ro']

开发

用法

  • /src 中开发您的插件。
  • 查看 bin/ 目录以获取有用的命令。

测试

在您的更改之后,您必须确保测试仍然通过。

$ composer install
$ bin/console doctrine:schema:create -e test
$ bin/behat
$ bin/phpstan.sh
$ bin/ecs.sh

许可

此库采用 MIT 许可。

致谢

3BRS 开发。
manGoweb 分支。