バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 注文内容から商品コードの抽出

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
popo
投稿日時: 2013/4/13 19:54
対応状況: −−−
長老
登録日: 2008/10/1
居住地:
投稿: 189
注文内容から商品コードの抽出
EC-CUBEバージョン
2.3.0
PHPバージョン
PHP 5.2.17
DBバージョン
PostgreSQL 7.4.19


いつもお世話になっております。

注文内容から特定の商品コードの注文金額の合計を抽出したいと思っています。
「data>class>helper>SC_Helper_DB.php」

例えば、商品コード「AAA」の商品が複数種類あり、商品コード「AAA」の合計金額が○円以上(または何個以上)含まれていた場合、送料の加算や送料無料の設定を行いたいと思っています。
商品コードは複数種類あります。「AAA」「BBB」など

現在は下記の方法で、商品コードによって送料の加算のカスタマイズをしています。
『商品コードにより送料カスタマイズ』

上記の方法では、例えば商品コード「ab」の商品が1つ以上含まれている場合は、送料を1000円を加算するようにしていますが、商品コード「ab」が含まれているか否かの判別だけで、金額までの判別は行なっておりません。
商品コード「ab」の商品が合計5000円以上含まれている場合は、送料無料にしたいと思います。

注文内容に、商品コード「ab」の商品の合計金額が5000円未満の場合は送料1000円加算して、5000円以上の場合は送料無料と言った具合です。


商品コードごとの合計金額が複雑になる場合は、特定の商品コードの合計注文個数などで判別すると行った方法でも良いかもしれません。
例えば、商品コード「AAA」の商品が5個以上カートに入っていれば、送料を割引にするなど。


何卒、アドバイスをお願い致します。
yuh
投稿日時: 2013/4/14 1:20
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 注文内容から商品コードの抽出

//------------------------------------------------------------------
//SC_CartSession.php calculate
	
        $cartItems = $this->getCartList($productTypeId);
		$tmp_product_code = array();
        foreach ($cartItems as $arrItem) {
			$tmp_product_code[$arrItem['productsClass']['product_code']]["price"] += $arrItem['price'] * $arrItem['quantity'];
			$tmp_product_code[$arrItem['productsClass']['product_code']]["quantity"] += $arrItem['quantity'];
        }
		//商品コード「ab」の商品の合計が5000円未満の場合は送料+1000円
		if($tmp_product_code['ab']["price"]  < 5000){
			$results['deliv_fee'] += 1000;
		}
		
		//商品コード「AAA」の商品の個数が5個以上の場合は10%割引
		if($tmp_product_code['AAA']["quantity"] >= 5){
			$results['deliv_fee'] = intval($results['deliv_fee'] * 0.9);
		}
		
		//商品コード「ab」の商品の合計が5000円以上の場合は送料無料
		if($tmp_product_code['ab']["price"] > 5000){
			$results['deliv_fee'] = 0;
		}
//--------------------------------------------------------------------

こんな感じですか?
popo
投稿日時: 2013/4/14 13:04
対応状況: −−−
長老
登録日: 2008/10/1
居住地:
投稿: 189
Re: 注文内容から商品コードの抽出
yuh様

アドバイスありがとうございます。
私の説明が不足していたようで大変申し訳ありません。
読み返してみて、書き方が悪かったと反省しております。


商品コードについてですが、同じ商品コードの商品が多数あります。
例えば商品コード「ab」が菓子パン類を示しており、商品コード「ab」の商品はあんぱん、メロンパン、クリームパン、あんドーナッツなど複数の商品で商品コード「ab」が使われています。
同様に商品コード「AAA」は惣菜パン類などを示しており商品コード「AAA」の商品は焼きそばパン、サンドイッチ、ピザ、ホットドッグなど複数の商品があります。

菓子パン、惣菜パンなどの各注文数や合計金額によって、送料を割り引いたり無料にするなどしたいと思っております。
また応用として菓子パンが例えば1個150円だった場合、4個で500円、8個1000円などと、まとめ買いの場合は割引なども出来たらしたいです。(菓子パン1個150円均一ではなく、種類によって150円、160円などあります。)
そのため、注文カートには複数種類の商品コード(「ab」「AAA」「BBB」など複数の商品コードがカートに入っている可能性があります)の商品の中から特定の商品コードを抽出して、その合計金額を計算しなければなりません。


商品コードによって、商品の種類(菓子パン、惣菜パンなど)を分類しているので、上記の送料や合計金額の割引などができるようになれば、お客さんへ提供できるサービスの幅も広がりますので、是非実装したいと思っております。

何卒、お力添えをお願い致します。
yuh
投稿日時: 2013/4/14 17:13
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 注文内容から商品コードの抽出
商品コードごとに合計金額・個数を集計してその集計結果を元に送料を無料にしたり、割引したり、送料を追加したりでいいんですか?
いまいち把握できてないです。
popo
投稿日時: 2013/4/14 19:33
対応状況: −−−
長老
登録日: 2008/10/1
居住地:
投稿: 189
Re: 注文内容から商品コードの抽出
yuh様
ご返信ありがとうごあいます。

まとまりが無い返答で申し訳ありません。
やりたい事は、2つあります。
1つは送料の変化、2つ目は注文金額の変化です。

1つは仰る通り、商品コードごとに合計金額や個数を集計して、その集計結果を元に送料を無料、割引、追加などの設定ができれば良いと思っております。
例えば個数を基準とすると、商品コード「ab」の商品を5個購入したら送料が半額、10個購入したら送料無料など。
または金額を基準とすると商品コード「ab」の商品の合計金額が1000円以上なら送料半額など。


2つ目は、商品コードごとに合計金額や個数を集計して、その集計結果を元に、送料では無く商品の合計金額を割引させたいと思っています。
例えば個数を基準にすると、商品コード「ab」の商品(150円や160円など)を4個購入したら、商品コード「ab」の合計注文金額を一律500円として計算。
8個なら商品コード「ab」の合計注文金額を一律1000円にするなどです。
または金額を基準にすると、商品コード「ab」の商品の合計金額が1200円以上なら注文金額200円値引きをするなど。
スーパーなどで良く見かける、このカートの中の商品で1個100円だけど、3個買えば250円になるといった具合に、多く注文すれば割安になりますよ、と言う感じです。



1つ目や2つ目についてですが、実際に利用する場合はキャンペーン内容によって、注文金額によって、または注文個数によって割引などを行いたいと思っております。

例えば1例ですが、今週は菓子パン5個で送料無料。来週は惣菜パン1000円以上で送料無料。(この場合は個数で判別)
または今週は菓子パン4個一律500円。来週は惣菜パン8個で一律1000円など。(この場合は合計金額で判別)

カートの中には菓子パンや惣菜パンなどが複数入っているので、カートに入っている商品の中から、特定の商品コード抽出して合計個数や金額などを算出する必要があります。

特定の商品コードの合計注文個数により送料を値引きするプログラム。
特定の商品コードの合計注文金額により送料を値引きするプログラム。
特定の商品コードの合計注文個数により注文金額から値引きをするプログラム。
特定の商品コードの合計注文金額により注文金額から値引きをするプログラム。
上記の4つに分かれると思います。
キャンペーンにより、上記4つのプログラムを使い分けると言った感じです。

かなり難しい処理になりそうですが、できるでしょうか。

こんな説明で上手く言えているのか分からないのですが、説明不足の箇所があればご指摘頂ければ補足をさせて頂きます。

何卒、よろしくお願い致します。
yuh
投稿日時: 2013/4/14 23:49
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 注文内容から商品コードの抽出
なるほどです。
calculateを変更すればできると思いますよ。
popo
投稿日時: 2013/4/15 15:49
対応状況: −−−
長老
登録日: 2008/10/1
居住地:
投稿: 189
Re: 注文内容から商品コードの抽出
yuh様

お返事ありがとうございます。
以前に自分でも「商品コードで送料を操作するには?」のスレッドを参考にしていろいろと試してみた事があるのですが、どうしても上手くできませんでした。

商品コードで送料を操作する場合は、例えば商品コード「ab」が注文カートに含まれているか否かを判別していると思います。
ですが、同じ商品コードの商品が複数個がカートに入っている場合は、その個数や金額をカウントする記述方法がよくわかりません。

下記のページを見つけましたが、どのように記述して良いのかがよくわかりません。
文字列に含まれる特定の文字を数える
[1]文字列に含まれる特定の文字を数える
[2]文字列に含まれる特定の文字を数える

またこれは特定の文字列の個数をカウントできても、金額の合計まで応用する事ができないかもしれません。

ん〜、かれこれずっと悩んでいたことなので、何とも頭が痛い問題です(>_<)
yuh
投稿日時: 2013/4/15 17:29
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 注文内容から商品コードの抽出
配列に商品コードをキーにしてカウントしていけばいいと思いますよ。
popo
投稿日時: 2013/4/15 19:55
対応状況: −−−
長老
登録日: 2008/10/1
居住地:
投稿: 189
Re: 注文内容から商品コードの抽出
yuh様

ご回答ありがとうございます。

仕組みはなんとなくイメージができるのですが、PHPの知識が無いため(エクセルの関数が使える程度です)具体的な記述方法が分かりません。

下記のように記述してみましたが、「$tmp_product_code」の箇所に何を入れて良いのかがイマイチよくわかりません。
どこに注文内容の情報が格納されているのか(-_-??


for($i = 0; $i <= $total_quantity; $i++)
{
if(substr_count($tmp_product_code , "AAA")){
$AAAcount += 1;
}
}

if($AAAcount > 4)
{
$results['deliv_fee'] = intval($results['deliv_fee'] * 0.5);
}

if($AAAcount > 8)
{
$results['deliv_fee'] = 0;
}



次に特定の商品コードの合計金額を、どのように求めるかが問題になってきます。
商品コードのカウントは、「substr_count」を使えばできそうですが、合計金額となると注文内容から特定の商品コードを限定して、その金額まで合計しなければなりません。
数値の合計で「array_sum」と言うのを見つけましたが、計算させる数値を特定させる方法が分かりません。
例えば商品コードAAAの商品を抽出して、抽出された商品の価格を合計させるのですが、これは「$tmp_product_code['AAA']["price"]」という記述で特定させるのでしょうか?


これが出来れば、よりスーパーなどで見かける値引きサービスに近づける事ができるので、私以外のEC-CUBEのユーザーさんも利用できるようになると思います。
なんとか実現させたいと思っておりますので、お力添え頂ければ助かります。

よろしくお願い致します。
yuh
投稿日時: 2013/4/15 22:50
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 注文内容から商品コードの抽出
以前に書いたコードですが

//------------------------------------------------------------------
//SC_CartSession.php calculate
	
        $cartItems = $this->getCartList($productTypeId);
	$tmp_product_code = array();
        foreach ($cartItems as $arrItem) {
			$tmp_product_code[$arrItem['productsClass']['product_code']]["price"] += $arrItem['price'] * $arrItem['quantity'];
			$tmp_product_code[$arrItem['productsClass']['product_code']]["quantity"] += $arrItem['quantity'];
        }

*/




	//商品コード「ab」の商品の合計が5000円未満の場合は送料+1000円
	if($tmp_product_code['ab']["price"]  < 5000){
		$results['deliv_fee'] += 1000;
	}
	
	//商品コード「AAA」の商品の個数が5個以上の場合は10%割引
	if($tmp_product_code['AAA']["quantity"] >= 5){
		$results['deliv_fee'] = intval($results['deliv_fee'] * 0.9);
	}
	
	//商品コード「ab」の商品の合計が5000円以上の場合は送料無料
	if($tmp_product_code['ab']["price"] > 5000){
		$results['deliv_fee'] = 0;
	}
//--------------------------------------------------------------------

カート内に商品コード「ab」(1000円 10個)、商品コード「AAA](500円 4個)、「ab」(100円 5個)があった場合
$tmp_product_codeの中は

$tmp_product_code = array(
"ab" => array(
"price"=> 10500,
"quantity"=> 15,
),
'AAA'=> array(
'price' => 2000,
'quantity'=> 4,
)
);
となっています。
一応商品コード別に個数・金額は算出させてます。
以前に書いたこれじゃ駄目なんでしょうか?
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は88,999名です
総投稿数は110,020件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1296
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.