プラグイン > バグ報告・利用に関する質問 > 同じ商品の別の規格をカートに入れさせないようにしたい |
バグ報告・利用に関する質問
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
beginner99 |
投稿日時: 2025/3/19 14:26
対応状況: −−−
|
常連 ![]() ![]() 登録日: 2024/6/4 居住地: 投稿: 45 |
同じ商品の別の規格をカートに入れさせないようにしたい ▼テンプレート
[EC-CUBE]4.1 [現象] 同じ商品の別の規格をカートに入れさせないようにしたいと考えております。 app\Customize\Service\CustomCartService.php を作成することで対応したいと考えております。 しかしながら ソースのどこかを間違っていると思われ、 上手く機能しません。 1) プログラム上、間違っている部分がありましたら教えてほしいです。 2) デバッグ やログを出力したいのですが、方法を教えて頂けると助かります。 3) 同じ商品がある場合、エラー文を表示させる方法を知りたい。 ソースは下記になります。 app\Customize\Service\CustomCartService.php class CustomCartService extends CartService { protected $cartItemRepository; protected $session; protected $translator; // 適用する商品IDリスト private $targetProductIds = [54]; // 例: 商品ID 54 に適用 public function __construct( CartItemRepository $cartItemRepository, SessionInterface $session, TranslatorInterface $translator ) { parent::__construct($cartItemRepository, $session, $translator); $this->cartItemRepository = $cartItemRepository; $this->session = $session; $this->translator = $translator; } /** * * @throws InvalidItemException */ public function addProduct($ProductClass, $quantity = 1) { $Product = $ProductClass->getProduct(); // ProductClass から Product を取得 // 特定の商品にのみ適用 if (in_array($Product->getId(), $this->targetProductIds)) { $cartItems = $this->getCart()->getCartItems(); foreach ($cartItems as $cartItem) { if ($cartItem->getProduct()->getId() === $Product->getId()) { if ($cartItem->getProductClass()->getId() !== $ProductClass->getId()) { // 異なる商品規格がカートにある場合、追加をブロック return false; } } } } return true; } } |
h_tanaka |
投稿日時: 2025/3/19 14:32
対応状況: −−−
|
神 ![]() ![]() 登録日: 2016/7/22 居住地: 愛媛県 投稿: 1969 |
Re: 同じ商品の別の規格をカートに入れさせないようにしたい 導入済みのプラグインで addProduct() を制御されていないでしょうか?
|
beginner99 |
投稿日時: 2025/3/19 14:43
対応状況: −−−
|
常連 ![]() ![]() 登録日: 2024/6/4 居住地: 投稿: 45 |
Re: 同じ商品の別の規格をカートに入れさせないようにしたい 返信ありがとうございます。
再注文プラグインで、 ReOrderController というコントローラーがあり、 そこで private function addProduct($order_no, OrderItem $OrderDetail, ProductClass $productClass) とありましたが、引数が 3つと多いため、違うような気がするのですが、いかがでしょうか。 他のプラグインでは見当たりませんでした。 |
mcontact |
投稿日時: 2025/3/19 15:04
対応状況: −−−
|
神 ![]() ![]() 登録日: 2022/1/22 居住地: 投稿: 1684 |
Re: 同じ商品の別の規格をカートに入れさせないようにしたい
EC-CUBEには、デバッグモードがあり公式ドキュメントにも記載されていますので参考にすると良いと思います。 https://doc4.ec-cube.net/debug_mode
|
beginner99 |
投稿日時: 2025/3/19 15:14
対応状況: −−−
|
常連 ![]() ![]() 登録日: 2024/6/4 居住地: 投稿: 45 |
Re: 同じ商品の別の規格をカートに入れさせないようにしたい ご返信ありがとうございます。
デバッグモードで log_info を使い 処理がどのように進んでいるのか 確認しようと思いましたが、 カート追加が ajax通信のせいか ログには出力されませんでした。 ajax通信でも log_info でログに出力できますでしょうか。 |
h_tanaka |
投稿日時: 2025/3/19 15:20
対応状況: −−−
|
神 ![]() ![]() 登録日: 2016/7/22 居住地: 愛媛県 投稿: 1969 |
Re: 同じ商品の別の規格をカートに入れさせないようにしたい dump() でデバッグしてみてください。
https://doc4.ec-cube.net/reverse-lookup/tips ajax の場合はブラウザの開発者ツールでデバッグできます。 https://qiita.com/enutake/items/9721503ca6a18febd894
|
tattsu |
投稿日時: 2025/3/22 10:21
対応状況: −−−
|
仙人 ![]() ![]() 登録日: 2023/12/23 居住地: 投稿: 413 |
Re: 同じ商品の別の規格をカートに入れさせないようにしたい >if ($cartItem->getProduct()->getId() === $Product->getId()) { CartItemにgetProduct()というメソッドはなかったと思います。(自分でカスタマイズ追加していなければ) >ajax通信でも log_info でログに出力できますでしょうか。 ajaxでもlog_infoでログ出力されますよ。
|
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |