質問 > 管理機能 > EC-CUBEの送料計算カスタマイズ |
管理機能
フラット表示 | 前のトピック | 次のトピック |
投稿者 | スレッド |
---|---|
daior |
投稿日時: 2024/4/10 20:30
対応状況: −−−
|
新米 ![]() ![]() 登録日: 2024/4/10 居住地: 投稿: 3 |
EC-CUBEの送料計算カスタマイズ EC-CUBEのバージョン:4.2.2、新規インストール
配送地域の郵便番号と商品に付与されたタグを基に、データベース内から送料を取得、合計していくカスタマイズを作成しています。 Plugin/Plugin名/EventListener 内に下記のようなイベントリスナーを設置し、配送地域が決定したタイミングで送料計算をトリガーさせようと考えましたが、うまくいきませんでした。 <?php namespace Plugin\CalcShippingCost42\EventListener; use Eccube\Event\EccubeEvents; use Eccube\Event\EventArgs; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Plugin\CalcShippingCost42\Repository\LandRepository; use Plugin\CalcShippingCost42\Repository\ShippingCostRepository; use Symfony\Component\HttpFoundation\Session\SessionInterface; use Psr\Log\LoggerInterface; class CalcShippingCostListener implements EventSubscriberInterface { protected $landRepository; protected $shippingCostRepository; protected $shippingCost = 0; protected $session; private $logger; public function __construct(LandRepository $landRepository, ShippingCostRepository $shippingCostRepository,SessionInterface $session,LoggerInterface $logger) { $this->landRepository = $landRepository; $this->shippingCostRepository = $shippingCostRepository; $this->session = $session; $this->logger = $logger; } public static function getSubscribedEvents() { return [ EccubeEvents::FRONT_SHOPPING_DELIVERY_COMPLETE => 'onShoppingDeliveryComplete', // 他のイベントもここに追加 ]; } public function onShoppingDeliveryComplete(EventArgs $event) { $this->logger->info('onShoppingDeliveryComplete'); // 配送先住所を入力する際の処理 // まず、配送先住所の郵便番号から地域Idを取得 $order = $event->get('Order'); $zipcode = $order->getDelivery()->getZipcode(); $landId = $this->landRepository->findLandIdByZipcode($zipcode); // 商品のタグを取得する //全商品をループ $Products = $order->getProducts(); foreach ($Products as $Product) { $itemTypeId = 0; $tags = $Product->getTags(); foreach ($tags as $tag) { if ($landId != 99) { //自社配送パターン if ($tag->getName() == '特別な商品A') { $itemTypeId = 2; break; } } else{ if ($tag->getName() == '特別な商品A') { $alert = 'お住まいの地域ではお取り扱いできない商品が含まれています。'; } //外部配送パターン if($tag->getName() == '特別な商品B'){ $itemTypeId = 6; break; } if ($tag->getName() == '小サイズ') { $itemTypeId = 3; break; } if ($tag->getName() == '中サイズ') { $itemTypeId = 4; break; } if ($tag->getName() == '大サイズ') { $itemTypeId = 5; break; } } } if($itemTypeId == 0){ continue; } $this->shippingCost += $this->shippingCostRepository->findShippingCost($landId, $itemTypeId, $Product->getPrice()); } if ($alert) { // Flashメッセージを設定 $this->session->getFlashBag()->add('error', $alert); // エラーがあった場合は、カート画面にリダイレクト $event->stopPropagation(); $event->setResponse($event->getController()->redirect('cart')); } $order->setShippingTotal($this->shippingCost); } } 試したこと: __construct()内でlog出せるかチェック => 表示 FRONT_CART_ADD_COMPLETE で、log出せるか確認 => 出ない bin/console debug:container | grep 'CalcShippingCostListener' を実行し、サービスに登録されているかを確認 => 登録済み 不足している情報もあるかと思いますが、アドバイスいただければと思います。よろしくお願いいたします。 |
フラット表示 | 前のトピック | 次のトピック |
題名 | 投稿者 | 日時 |
---|---|---|
» ![]() |
daior | 2024/4/10 20:30 |
![]() |
tattsu | 2024/4/10 21:18 |
![]() |
daior | 2024/4/11 16:28 |
![]() |
tattsu | 2024/4/11 17:28 |
![]() |
tao_s | 2024/4/12 19:17 |
![]() |
daior | 2024/4/12 20:32 |
