> 管理機能 > 受注メールの送信先について |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
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取れると認識しておりますが、どこかうまくいかないようでしたらご返信ください。
|
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のみで実現することができました。 ありがとうございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |