バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 複数購入で割り引きをしたい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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()で
値を参照する時に計算していると思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

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の中でも一番コアな部分でややこしく把握するのに時間がかかるかと思います。
既存の動きを変更するにもかなり重たい部分かと思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

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個以上同時購入はできなくしています。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は88,288名です
総投稿数は109,688件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
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.