バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

 > 管理機能 > 受注メールの送信先について

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
cima
投稿日時: 2016/11/20 2:00
対応状況: −−−
新米
登録日: 2016/11/20
居住地:
投稿: 3
受注メールの送信先について
EC-CUBE 3.0.12-p1 において
商品種別を利用して、店舗毎に商品を登録しています。
店舗によって、配送料や代引手数料、送料無料条件が違うためです。

店舗毎の配送料や代引手数料は設定済み。
送料無料条件は、src/Eccube/Service/ShoppingService.php においてカスタマイズしました。
カートページの「商品の合計金額は「\ ○○○○」です。 あと「\ ○○○○」のお買い上げで送料無料になります。」
の部分も、src/Eccube/Controller/CartController.php において商品種別毎の条件式を使って対応しました。

そこで、受注時に管理者に送られる受注メールの送信先を店舗によって切り替えたいと思っています。
src/Eccube/Service/MailService.php の
public function sendOrderMail(\Eccube\Entity\Order $Order) の $message
->setBcc($this->BaseInfo->getEmail01()) の部分を
->setBcc($変数) にして、商品種別のIDによってアドレスを変えたいのですがうまくいきません。
そもそもこの部分に条件式を入れること自体できないのでしょうか?
変数を使わず ->setBcc(指定のアドレス) のように直に書くとうまくいくのですが・・・

又、このMailService.phpで、商品種別IDを取得することもできないのしょうか?
CartController.php では、
$productTypes = $app['eccube.service.cart']->getProductTypes(); でうまく取得できたのですが・・・

ショップマスターとの連動はなくても構いません。
アドバイズ頂ければ幸いです。
umebius
投稿日時: 2016/11/21 16:44
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: 受注メールの送信先について
sendOrderMail(\Eccube\Entity\Order $Order)メソッド内でしたら、
$Order->getProductTypes();で商品種別取得できませんか?

戻り値はProductTypeオブジェクトの配列のはずですが。
その最初のProductType取り出してgetId()すれば商品種別ID取れると認識しておりますが、どこかうまくいかないようでしたらご返信ください。


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

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

cima
投稿日時: 2016/11/21 22:49
対応状況: −−−
新米
登録日: 2016/11/20
居住地:
投稿: 3
Re: 受注メールの送信先について
umebius様 ありがとうございます。

$productTypes = $Order->getProductTypes();
$orderMailArr = array(
1 => '商品種別1の時に送信したいアドレス',
2 => 商品種別2の時に送信したいアドレス',
3 => '商品種別3の時に送信したいアドレス',
);

if (count($productTypes)) {
foreach($productTypes as $ProductType){
if(array_key_exists($ProductType->getId(), $orderMailArr)){
$orderMailadls = $orderMailArr[$ProductType->getId()];
break;
}
}
}

$message = \Swift_Message::newInstance()

->setBcc($orderMailadls)



で実現できました。


アドバイスを頂く前は、一旦あきらめて
ShoppingService.php側の sendOrderMail(Order $Order) の方で

$productTypes = $this->orderService->getProductTypes($Order);
$orderMailArr = array(
1 => 1,
2 => 2,
3 => 3,
);

if (count($productTypes)) {
foreach($productTypes as $ProductType){
if(array_key_exists($ProductType->getId(), $orderMailArr)){
$orderMailadls = $orderMailArr[$ProductType->getId()];
break;
}
}
}
if($orderMailadls==1) {
$message = $this->app['eccube.service.mail']->sendOrderMail($Order);
} else if($orderMailadls==2) {
$message = $this->app['eccube.service.mail']->sendOrderMail2($Order);
} else if($orderMailadls==3) {
$message = $this->app['eccube.service.mail']->sendOrderMail3($Order);
} else {
$message = $this->app['eccube.service.mail']->sendOrderMail($Order);
}

として、MailService.phpに渡し
MailService.php側で、

public function sendOrderMail(\Eccube\Entity\Order $Order) 部分をまるごとコピペして
public function sendOrderMail2
public function sendOrderMail3
を追加し、
それぞれ、 ->setBcc に、送信したいアドレスを直に指定することで一応、実現はできていました。
これは、メゾットを増やすことで、他に影響を及ぼす箇所があるかもしれない・・・ と不安に思っていました。

アドバイスを頂き、再度、チャレンジしたところ
MailService.phpのみで実現することができました。
ありがとうございました。
 
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は89,000名です
総投稿数は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.