バージョン選択

フォーラム

メニュー

オンライン状況

17 人のユーザが現在オンラインです。 (7 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 17
もっと...

サイト内検索

質問 > 管理機能 > 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' を実行し、サービスに登録されているかを確認 => 登録済み

不足している情報もあるかと思いますが、アドバイスいただければと思います。よろしくお願いいたします。
フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
 » EC-CUBEの送料計算カスタマイズ daior 2024/4/10 20:30
     Re: EC-CUBEの送料計算カスタマイズ tattsu 2024/4/10 21:18
       Re: EC-CUBEの送料計算カスタマイズ daior 2024/4/11 16:28
         Re: EC-CUBEの送料計算カスタマイズ tattsu 2024/4/11 17:28
         Re: EC-CUBEの送料計算カスタマイズ tao_s 2024/4/12 19:17
           Re: EC-CUBEの送料計算カスタマイズ daior 2024/4/12 20:32

 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は89,391名です
総投稿数は110,082件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1652
8
red
1570
9
mcontact
1304
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.