EC-CUBE4で商品毎に受注メールアドレスを設定するプラグインを作る方法

EC-CUBE4で商品毎に受注メールアドレスを設定するプラグインを作る方法です。

メールアドレスが登録されている商品は注文完了時そのメールアドレスにメールが送信されます。

まずは以下のコマンドでプラグインの雛形を作ります。

プラグインコードはなんでも良いのですが、今回は「MailOrderForEachProduct4」にしてください。

bin/console eccube:plugin:generate

受注受付メールアドレスを登録できるようにProductエンティティを拡張

受注受付メールアドレスを登録できるようにProductエンティティを拡張するために、ProductTraitファイルを用意します。

以下のファイルをPlugin/MailOrderForEachProduct/Entity/ProductTrait.phpに設置してください。

<?php

namespace Plugin\MailOrderForEachProduct4\Entity;

use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation\EntityExtension;
use Eccube\Annotation\FormAppend;

/**
 *
 * @author Akira Kurozumi <info@a-zumi.net>
 * 
 * @EntityExtension("Eccube\Entity\Product")
 */
trait ProductTrait {

    /**
     * @var string|null
     *
     * @ORM\Column(name="email", type="string", length=255, nullable=true)
     * @FormAppend(
     *  auto_render=true,
     *  type="\Symfony\Component\Form\Extension\Core\Type\TextType",
     *  options={
     *    "required": false,
     *    "label": "受注受付メールアドレス"
     *  }
     * )
     */
    private $email;

    /**
     * @return string|null
     */
    public function getEmail(): ?string
    {
        return $this->email;
    }

    /**
     * @param string|null $email
     * @return $this
     */
    public function setEmail(?string $email): self
    {
        $this->email = $email;

        return $this;
    }

}

これで商品登録・編集ページに受注受付メールアドレス項目が追加されます。

注文完了時に実行されるメール送信処理に商品毎に登録されているメールアドレスを追加

注文完了時に実行されるメール送信処理に、注文された商品に登録されているメールアドレスをBCCとして追加するイベントを用意します。

以下の内容をEvent.phpに記載してください。

<?php

namespace Plugin\MailOrderForEachProduct4;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Eccube\Event\EccubeEvents;
use Eccube\Event\EventArgs;

/**
 * @author Akira Kurozumi <info@a-zumi.net>
 */
class Event implements EventSubscriberInterface
{
    /**
     * @return array
     */
    public static function getSubscribedEvents()
    {
        return [
            EccubeEvents::MAIL_ORDER => 'onMailOrder'
        ];
    }
    
    /**
     * 商品に受注受付メールアドレスが登録されていた場合メール送信
     * 
     * @param EventArgs $event
     */
    public function onMailOrder(EventArgs $event) {
        $message = $event->getArgument("message");
        $Order = $event->getArgument("Order");
        
        foreach ($Order->getShippings() as $Shipping) {
            foreach ($Shipping->getOrderItems() as $Item) {
                if ($Item->isProduct()) {
                    if($Item->getProductClass()->getProduct()->getEmail()) {
                        $message->setBcc(explode(',', $Item->getProductClass()->getProduct()->getEmail()));                        
                    }
                }
            }
        }
    }
}

以上で完成です。

プラグインのインストールと有効化

プラグインのインストールと有効化を行うと動作します。

商品登録・編集ページに受注受付メールアドレス項目が追加されていますのでメールアドレスを登録すると注文完了時にそのメールアドレス宛にメールが送信されます。

メールアドレス登録時のバリデーション処理など細かい部分は実装していませんのでご注意ください。

このプラグインのファイル一式はこちら

お気軽にコメントをどうぞ

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください