質問 > フロント機能 > 複数購入で割り引きをしたい |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
masaru |
投稿日時: 2021/10/15 20:04
対応状況: 確認中
|
半人前 登録日: 2009/7/7 居住地: 投稿: 18 |
複数購入で割り引きをしたい ▼テンプレート
[EC-CUBE] 4.1.0 [レンタルサーバ] さくらのインターネット [OS] CentOS Linux release 7.9.2009 [PHP] Version 7.4.20 [データベース] MySQL 5.7.34 [WEBサーバ] Apache/2.4.6 [導入プラグインの有無] 無 [カスタマイズの有無] 未 1個だと基本価格、2個以上だと75%ディスカウントと割引したいのですが、個数×単価の計算をどこでやっているのか見つけられません。 Cart/index.twigで個数はcartItem.quantity、合計金額はtotalPrice、小計はCartItem.total_price、合計はCart.totalPriceだろうと目処を付けたのですが。 |
468 |
投稿日時: 2021/10/18 11:41
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 複数購入で割り引きをしたい /src/Eccube/Entity/CartItem.php function getTotalPrice()で
値を参照する時に計算していると思います。
|
masaru |
投稿日時: 2021/10/19 12:59
対応状況: −−−
|
半人前 登録日: 2009/7/7 居住地: 投稿: 18 |
Re: 複数購入で割り引きをしたい ありがとうございます
public function getTotalPrice() { /* return $this->getPrice() * $this->getQuantity(); */ if (quantity == 1) { return $this->getPrice() * $this->getQuantity(); } elseif (quantity >= 2 ) { return $this->getPrice() * 0.75 * $this->getQuantity(); } } と修正したのですが、合計金額は単価×個数のままで、値引きが反映されていません。 |
468 |
投稿日時: 2021/10/21 10:44
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 複数購入で割り引きをしたい そもそもの話になるかともしれませんが
カートの中身時点で値引きを考慮した設計になっていない為、 部分的な改修では対応が難しいと思います。 (カートの中ページの表示を改修できたとしても次の受注確認ページで生成される 注文データは再び単価×個数で計算された結果がセットされるのではないでしょうか?) ソースをかなり解析して処理を把握していく必要があるかと思いますが、 注文関連のロジックはECCUBEの中でも一番コアな部分でややこしく把握するのに時間がかかるかと思います。 既存の動きを変更するにもかなり重たい部分かと思います。
|
masaru |
投稿日時: 2021/10/26 11:29
対応状況: −−−
|
半人前 登録日: 2009/7/7 居住地: 投稿: 18 |
Re: 複数購入で割り引きをしたい ありがとうございました
もう少し解析を続けてみます |
masaru |
投稿日時: 2021/10/27 22:54
対応状況: −−−
|
半人前 登録日: 2009/7/7 居住地: 投稿: 18 |
Re: 複数購入で割り引きをしたい まず
/src/Eccube/Entity/CartItem.php の修正が間違えていて、正しくは public function getTotalPrice() { if ($this->getQuantity() == 1) { return $this->getPrice() * $this->getQuantity(); } elseif ($this->getQuantity() >= 2 ) { return $this->getPrice() * 0.75 * 2;//$this->getQuantity(); } } でした。 でも、これだとカートの中の小計しか割引になりません。 |
masaru |
投稿日時: 2021/10/27 23:13
対応状況: −−−
|
半人前 登録日: 2009/7/7 居住地: 投稿: 18 |
Re: 複数購入で割り引きをしたい カートの中の合計、「ご注文手続き」(shopping)の小計、合計、お支払合計に割引を反映させるには
src/Eccube/Service/PurchaseFlow/PurchaseFlow.php の protected function calculateTotal(ItemHolderInterface $itemHolder) { $total = array_reduce($itemHolder->getItems()->toArray(), function ($sum, ItemInterface $i\ tem) { if ($item->getQuantity() == 1) { $sum += $item->getPriceIncTax() * $item->getQuantity(); } elseif ($item->getQuantity() >= 2 ) { $sum += $item->getPriceIncTax() * 1.5 ; } return $sum; }, 0); protected function calculateSubTotal(ItemHolderInterface $itemHolder) { $total = $itemHolder->getItems() ->getProductClasses() ->reduce(function ($sum, ItemInterface $item) { if ($item->getQuantity() == 1) { $sum += $item->getPriceIncTax() * $item->getQuantity(); } elseif ($item->getQuantity() >= 2 ) { $sum += $item->getPriceIncTax() * 1.5; } return $sum; }, 0); を修正しました。 さらにshoppingページで小計の部分に使われているOrder.taxable_totalがどこで計算されているかわからなかったので、Order.payment_totalで置き換えて <div class="ec-totalBox__total">{{ '合計'|trans }}<span class="ec-totalBox__price">{{ Order.payment_total|price }}</span><span class="ec-totalBox__taxLabel">{{ '税込'|trans }}</span></div> としました。 これでとりあえず1個購入は定価、2個と3個購入では定価の1.5倍にすることができました。商品に3個までの購入制限をかけているので、4個以上同時購入はできなくしています。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |