バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

 > フロント機能 > カートに入っている商品種別IDを参照し、商品種別毎に送料無料設定

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
bysk
投稿日時: 2016/10/5 20:19
対応状況: −−−
半人前
登録日: 2016/5/26
居住地:
投稿: 22
カートに入っている商品種別IDを参照し、商品種別毎に送料無料設定
[EC-CUBE] 3.0.9
[レンタルサーバ] AWS
[OS] Mac OS X Yosemite 10.10.5
[PHP] PHP 5.3.29
[データベース] MySQL 5.5.40
[ブラウザ] GoogleChrome
[導入プラグインの有無] GmoPaymentGateway、おすすめ商品管理プラグイン、商品お問い合わせ、商品レビュープラグイン、売上ランキング、最近チェックした商品、SEO管理プラグイン

どうもお世話になっております、下記の件で困っております。
どうぞ宜しくお願い致します。

[やりたい事]
現在カートに入っている商品種別IDを参照して、商品種別毎に送料無料条件を変更したい。

送料無料設定をしているメソッドはこちらのフォーラムのおかげで理解できたのですが、
$Ordeから商品種別IDの呼び方がわからず行き詰まっております..

$productTypesあたりかなと思っているのですがうまく機能してくれません。


【対象ファイル】
/src/Eccube/Service/ShoppingService.php


【対象ソース】
public function setDeliveryFreeAmount(Order $Order)
{
// 配送料無料条件(合計金額)
$deliveryFreeAmount = $this->BaseInfo->getDeliveryFreeAmount();
if (!is_null($deliveryFreeAmount)) {

// 合計金額が設定金額以上であれば送料無料
if ($Order->getSubTotal() >= $deliveryFreeAmount) {
$Order->setDeliveryFeeTotal(0);


下記の様なイメージです。

【例】
カートに入っている商品種別IDが1の場合→10,000円以上で送料無料
カートに入っている商品種別IDが2の場合→5,000円以上で送料無料


どうかお力をお貸し頂ければ幸いです。

何卒、宜しくお願い致します。
umebius
投稿日時: 2016/10/5 20:51
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: カートに入っている商品種別IDを参照し、商品種別毎に送料無料設定
ShoppingServiceから呼ぶなら
$this->cartService->getProductTypes();でProductTypeとれないですかね?


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

bysk
投稿日時: 2016/10/5 21:16
対応状況: −−−
半人前
登録日: 2016/5/26
居住地:
投稿: 22
Re: カートに入っている商品種別IDを参照し、商品種別毎に送料無料設定
umebius様


お世話になっております、度々ありがとうございます。

下記の通り記述して商品種別IDが1で1000円以上の商品をカートに入れてみましたが送料は0になりませんでした。


/**
* 配送料無料条件(合計金額)の条件を満たしていれば配送料金を0に設定
*
* @param Order $Order
*/
public function setDeliveryFreeAmount(Order $Order)
{
// 配送料無料条件(合計金額)
$productTypeId = $this->cartService->getProductTypes();

if ($productTypeId == 1) {
$deliveryFreeAmount = 1000;
}

if (!is_null($deliveryFreeAmount)) {

// 合計金額が設定金額以上であれば送料無料
if ($Order->getSubTotal() >= $deliveryFreeAmount) {
$Order->setDeliveryFeeTotal(0);
// お届け先情報の配送料も0にセット
$shippings = $Order->getShippings();
foreach ($shippings as $Shipping) {
$Shipping->setShippingDeliveryFee(0);
}
}
}
}


お手数ですがご教示頂ければ幸いです。

何卒、宜しくお願い致します。
umebius
投稿日時: 2016/10/5 21:43
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: カートに入っている商品種別IDを参照し、商品種別毎に送料無料設定
$productTypeId = $this->cartService->getProductTypes();

と書かれていますが、getProductTypesの戻り値は配列です。
中身は\Eccube\Entity\Master\ProductTypeというオブジェクトです。

なのでif ($productTypeId == 1) {はfalseになりますね。

すみません、ちょっと今他の部分は確認できてないです。

bysk
投稿日時: 2016/10/5 22:16
対応状況: −−−
半人前
登録日: 2016/5/26
居住地:
投稿: 22
Re: カートに入っている商品種別IDを参照し、商品種別毎に送料無料設定
ご返信ありがとうございます。

商品種別IDを$productTypeIdに代入して下記のif文の様に、
商品種別IDが1だった場合$deliveryFreeAmountに1000を代入したいのすが..


if ($productTypeId == 1) {
$deliveryFreeAmount = 1000;
}


php初心者でして1から10まで聞いてしまい申し訳ございません。
可能であれば引き続きご教示頂ければ幸いです。

宜しくお願い致します。
umebius
投稿日時: 2016/10/5 22:35
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: カートに入っている商品種別IDを参照し、商品種別毎に送料無料設定
こんな感じでしょうか

$productTypes = $this->cartService->getProductTypes();

if (count($productTypes)) {
foreach($productTypes as $ProductType){
if($ProductType->getId()==1){
$deliveryFreeAmount = 1000;
break;
}
}
}
bysk
投稿日時: 2016/10/5 22:51
対応状況: −−−
半人前
登録日: 2016/5/26
居住地:
投稿: 22
Re: カートに入っている商品種別IDを参照し、商品種別毎に送料無料設定
umebius様

出来ました!

大変助かりました、誠にありがとうございます!

ちなみに複数条件設定したい場合は下記の様に、同じ記述を続けるしかないでしょうか?


$productTypes = $this->cartService->getProductTypes();

if (count($productTypes)) {
foreach($productTypes as $ProductType){
if($ProductType->getId()==1){
$deliveryFreeAmount = 1000;
break;
}
}
}

if (count($productTypes)) {
foreach($productTypes as $ProductType){
if($ProductType->getId()==2){
$deliveryFreeAmount = 2000;
break;
}
}
}

if (count($productTypes)) {
foreach($productTypes as $ProductType){
if($ProductType->getId()==3){
$deliveryFreeAmount = 800;
break;

}
}
}
umebius
投稿日時: 2016/10/5 23:10
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: カートに入っている商品種別IDを参照し、商品種別毎に送料無料設定
こんな感じでしょうか?

$productTypes = $this->cartService->getProductTypes();
$freeAmountArr = array(
1 => 1000,
2 => 2000,
3 => 800,
);

if (count($productTypes)) {
foreach($productTypes as $ProductType){
if(array_key_exists($ProductType->getId(), $freeAmountArr)){
$deliveryFreeAmount = $freeAmountArr[$ProductType->getId()];
break;
}
}
}
bysk
投稿日時: 2016/10/6 10:57
対応状況: 解決済
半人前
登録日: 2016/5/26
居住地:
投稿: 22
Re: カートに入っている商品種別IDを参照し、商品種別毎に送料無料設定
umebius様

お世話になっております。

頂いたソースで希望通りの設定が完了しました。

お陰様で大変助かりました。

誠にありがとうございます!
umebius
投稿日時: 2016/10/6 11:59
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: カートに入っている商品種別IDを参照し、商品種別毎に送料無料設定
よかったです!
フレームワーク使ってるので独特なオブジェクトがでてきてけっこう悩みますよね。


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

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