setono/sylius-mailchimp-plugin

Sylius 的 Mailchimp 插件。

安装量: 27,941

依赖项: 0

建议者: 0

安全: 0

星标: 11

关注者: 2

分支: 14

开放问题: 18

类型:sylius-plugin

v0.5.7 2023-10-23 06:01 UTC

README

Latest Version Latest Unstable Version Software License Build Status

概览

本插件有三个主要目的

  1. 将您的客户(作为成员/订阅者)推送到 Mailchimp
  2. 利用他们的 电子商务功能 将您的订单推送到 Mailchimp
  3. 允许您的客户在结账时,以及使用您页面上的表单注册新闻通讯

它以节省内存和性能优化的方式完成所有这些。

安装

1. 安装依赖项

此插件使用 Doctrine ORM Batcher bundle。首先按照该页面上的说明进行安装。

2. 使用 composer 需求插件

$ composer require setono/sylius-mailchimp-plugin

3. 导入配置

# config/packages/setono_sylius_mailchimp.yaml
imports:
    - { resource: "@SetonoSyliusMailchimpPlugin/Resources/config/app/config.yaml" }
        
setono_sylius_mailchimp:
    api_key: '%env(MAILCHIMP_API_KEY)%'

请记住更新您的 .env.env.local 文件

# .env

###> setono/sylius-mailchimp-plugin ###
MAILCHIMP_API_KEY=
###< setono/sylius-mailchimp-plugin ###
# .env.local

###> setono/sylius-mailchimp-plugin ###
MAILCHIMP_API_KEY=INSERT YOUR API KEY HERE
###< setono/sylius-mailchimp-plugin ###

4. 导入路由

# config/routes/setono_sylius_mailchimp.yaml
setono_sylius_mailchimp:
    resource: "@SetonoSyliusMailchimpPlugin/Resources/config/routing.yaml"

5. 将插件类添加到您的 bundles.php

$bundles = [
    // ...
    
    // Notice that the Mailchimp plugin has to be added before the SyliusGridBundle
    Setono\SyliusMailchimpPlugin\SetonoSyliusMailchimpPlugin::class => ['all' => true],
    Sylius\Bundle\GridBundle\SyliusGridBundle::class => ['all' => true],
    Setono\DoctrineORMBatcherBundle\SetonoDoctrineORMBatcherBundle::class => ['all' => true],
    
    // ...
];

请确保在 SyliusGridBundle 之前添加插件。否则,您将收到类似于 您请求了不存在的参数 "setono_sylius_mailchimp.model.audience.class" 的异常。

6. 覆盖核心类

覆盖 Customer 资源

<?php
// src/Entity/Customer/Customer.php

declare(strict_types=1);

namespace App\Entity\Customer;

use Sylius\Component\Core\Model\Customer as BaseCustomer;
use Setono\SyliusMailchimpPlugin\Model\CustomerInterface as SetonoSyliusMailchimpPluginCustomerInterface;
use Setono\SyliusMailchimpPlugin\Model\CustomerTrait as SetonoSyliusMailchimpPluginCustomerTrait;
use Doctrine\ORM\Mapping as ORM;
    
/**
 * @ORM\Entity
 * @ORM\Table(name="sylius_customer")
 */
class Customer extends BaseCustomer implements SetonoSyliusMailchimpPluginCustomerInterface
{
    use SetonoSyliusMailchimpPluginCustomerTrait;
}

覆盖 Order 资源

<?php
// src/Entity/Order/Order.php

declare(strict_types=1);

namespace App\Entity\Order;

use Sylius\Component\Core\Model\Order as BaseOrder;
use Setono\SyliusMailchimpPlugin\Model\OrderInterface as SetonoSyliusMailchimpPluginOrderInterface;
use Setono\SyliusMailchimpPlugin\Model\OrderTrait as SetonoSyliusMailchimpPluginOrderTrait;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="sylius_order")
 */
class Order extends BaseOrder implements SetonoSyliusMailchimpPluginOrderInterface
{
    use SetonoSyliusMailchimpPluginOrderTrait;
}

覆盖 Channel 资源

<?php
// src/Entity/Channel/Channel.php

declare(strict_types=1);

namespace App\Entity\Channel;

use Sylius\Component\Core\Model\Channel as BaseChannel;
use Setono\SyliusMailchimpPlugin\Model\ChannelInterface as SetonoSyliusMailchimpPluginChannelInterface;
use Setono\SyliusMailchimpPlugin\Model\ChannelTrait as SetonoSyliusMailchimpPluginChannelTrait;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="sylius_channel")
 */
class Channel extends BaseChannel implements SetonoSyliusMailchimpPluginChannelInterface
{
    use SetonoSyliusMailchimpPluginChannelTrait;
}

创建 CustomerRepository.php

<?php
// src/Doctrine/ORM/CustomerRepository.php

declare(strict_types=1);

namespace App\Doctrine\ORM;

use Setono\SyliusMailchimpPlugin\Repository\CustomerRepositoryInterface as SetonoSyliusMailchimpPluginCustomerRepositoryInterface;
use Setono\SyliusMailchimpPlugin\Doctrine\ORM\CustomerRepositoryTrait as SetonoSyliusMailchimpPluginCustomerRepositoryTrait;
use Sylius\Bundle\CoreBundle\Doctrine\ORM\CustomerRepository as BaseCustomerRepository;

class CustomerRepository extends BaseCustomerRepository implements SetonoSyliusMailchimpPluginCustomerRepositoryInterface
{
    use SetonoSyliusMailchimpPluginCustomerRepositoryTrait;
}

创建 OrderRepository.php

<?php
// src/Doctrine/ORM/OrderRepository.php

declare(strict_types=1);

namespace App\Doctrine\ORM;

use Setono\SyliusMailchimpPlugin\Repository\OrderRepositoryInterface as SetonoSyliusMailchimpPluginOrderRepositoryInterface;
use Setono\SyliusMailchimpPlugin\Doctrine\ORM\OrderRepositoryTrait as SetonoSyliusMailchimpPluginOrderRepositoryTrait;
use Sylius\Bundle\CoreBundle\Doctrine\ORM\OrderRepository as BaseOrderRepository;

class OrderRepository extends BaseOrderRepository implements SetonoSyliusMailchimpPluginOrderRepositoryInterface
{
    use SetonoSyliusMailchimpPluginOrderRepositoryTrait;
}

添加配置

# config/packages/_sylius.yaml
sylius_channel:
    resources:
        channel:
            classes:
                model: App\Entity\Channel\Channel

sylius_customer:
    resources:
        customer:
            classes:
                model: App\Entity\Customer\Customer
                repository: App\Doctrine\ORM\CustomerRepository
                
sylius_order:
    resources:
        order:
            classes:
                model: App\Entity\Order\Order
                repository: App\Doctrine\ORM\OrderRepository

7. 更新数据库

$ php bin/console doctrine:migrations:diff
$ php bin/console doctrine:migrations:migrate

8. 安装资产

$ php bin/console assets:install

步骤 9:使用异步传输(可选,但非常推荐)

此插件中的所有命令都将扩展 CommandInterface。因此,您可以通过将此添加到您的 信使配置 来轻松路由所有命令。

# config/packages/messenger.yaml
framework:
    messenger:
        routing:
            # Route all command messages to the async transport
            # This presumes that you have already set up an 'async' transport
            # See docs on how to setup a transport like that: https://symfony.com.cn/doc/current/messenger.html#transports-async-queued-messages
            'Setono\SyliusMailchimpPlugin\Message\Command\CommandInterface': async

10. 复制模板

将位于测试目录中的模板(tests/Application/templates/bundles/ 链接)复制到您的模板目录中,并根据需要修改。

11. 清除缓存

$ php bin/console cache:clear

12. 定义固件

# fixtures.yaml

sylius_fixtures:
    suites:
        default:
            fixtures:
                setono_mailchimp:
                    options:
                        custom:
                          - name: 'United States audience'
                            audience_id: '0598aea4e3'
                            channel: 'FASHION_WEB'
                          - name: 'Denmark audience'
                            audience_id: '0e23b9524f'
                            channel: 'DK_WEB'

用法

实体推送使用 mailchimp 状态机

Mailchimp workflow

当状态为 待处理 时,实体将被推送到 Mailchimp。如您从图中所示,实体的更新和失败都由状态机处理。

默认情况下,该插件可以将客户和订单推送到 Mailchimp。

推送客户

运行以下命令以推送客户

$ php bin/console setono:sylius-mailchimp:push-customers

推送订单

运行以下命令以推送订单

$ php bin/console setono:sylius-mailchimp:push-orders

插入订阅表单

要将订阅表单插入到您网站上的任何位置,只需在 twig 中执行以下操作

{% include '@SetonoSyliusMailchimpPlugin/Shop/subscribe.html.twig' %}

当然,您也可以使用 BlockEventListener

<service id="app.block_event_listener.shop.subscribe_to_newsletter" class="Sylius\Bundle\UiBundle\Block\BlockEventListener">
    <argument>@SetonoSyliusMailchimpPlugin/Shop/subscribe.html.twig</argument>

    <tag name="kernel.event_listener" event="sonata.block.event.sylius.shop.layout.after_footer" method="onBlockEvent"/>
</service>

在这种情况下 - 您应该禁用默认的块事件监听器

setono_sylius_mailchimp:
  subscribe: false

故障排除

将频道关联到受众

当将受众关联到频道时,如果您收到如下消息: image (5)

请验证您的频道是否有地址,如果没有,请定义它并尝试重新提交表单。

贡献

运行 composer try 来设置插件环境并尝试测试应用。

请在推送更改之前运行 composer all 以运行所有检查和测试。

测试

运行 composer tests 以运行所有测试。