バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

バグ報告 > 管理機能 > 受注管理からのメール通知で{order}の差込がおかしい

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
投稿日時: 2007/10/2 11:22
対応状況: −−−
受注管理からのメール通知で{order}の差込がおかしい
長々と書いていたら投稿時にエラーで消えてしまった(汗)。
簡潔に書きます(笑)。
1.4.3-betaで確認した内容です。

もともとあるテンプレート
1.受注完了テンプレート(PC用)
2.受注完了テンプレート(携帯用)
に2つ追加して
3.入金確認(PC用)
4.商品発送(PC用)
を作りました。

受注管理から注文した顧客に対してメール通知する際、このテンプレートから選択して送信できます。
そのとき{order}を入れた部分が1と4には空白で、2にPC用、3に携帯用のmail_order.tplが差し込まれてきます。

/html/admin/order/mail.phpを調べると94行目あたりで
$objSendMail = sfSendOrderMail($_POST['order_id'], $_POST['template_id'], $_POST['subject'], $_POST['body'], false);

としていますが、2番目の引数はsend_typeが入るべきところのように思います。
ただし、$_POST['send_type']としても、受注からのメール通知ではそのデータを持たせていないようなので機能しません。
またdtb_mailtemplateのsend_typeも0、1となっていますので1、2にずらす必要があるものと思われます。

思うにPC用、携帯用のtemplate_id(たぶんsend_type)と作れるテンプレートのtemplate_idを勘違いしているのではないかと...

ご確認願います。
ramrun
投稿日時: 2007/10/2 11:24
対応状況: −−−
仙人
登録日: 2006/11/3
居住地:
投稿: 789
Re: 受注管理からのメール通知で{order}の差込がおかしい
あ、上の投稿は私です(汗)。
どうやらタイムアウトでログアウトしちゃったみたいです。
adachi
投稿日時: 2007/10/2 16:01
対応状況: −−−
EC-CUBE開発チーム
登録日: 2007/2/14
居住地: 大阪
投稿: 93
Re: 受注管理からのメール通知で{order}の差込がおかしい
ramrun様

開発チームの足立です、

上記の件、ソースコードを追って調べてみました。

引数を修正する必要はなく、sfSendOrderMail()の方を修正すれば良さそうです。
sfSendOrderMail()の中で、引数で渡されたtemplate_idからsend_typeを取得し、

// 受注動的部分を取得
$body = $objMailView->fetch($arrMAILTPLPATH[$send_type]);

のようにすれば正しくmail_order.tplを開くことができると思います。

tracにも登録させていただきました。

ありがとうございます。
ramrun
投稿日時: 2007/10/2 18:30
対応状況: −−−
仙人
登録日: 2006/11/3
居住地:
投稿: 789
Re: 受注管理からのメール通知で{order}の差込がおかしい
ご確認いただきありがとうございます。

なるほど〜 と思い、template_idでdtb_mailtemplateからsend_typeを取得してみました。
send_typeはあらかじめ0、1を1、2に変更していたんですがそれを使って $arrMAILTPLPATH[$send_type] としてみてもうまくいかず。

さらに調べてみると、テンプレート側ではあくまで0〜の番号を使用していて、それを$_POST[$template_id]で取得しているため1つずれるようです。

テンプレートを選択したときに表示されるメール内容は
    //テンプレートファイルで選択されたテンプレート名をテンプレートIDと関連付ける
    $_POST['template_id'] = $arrTemplate[0][$_POST['template_id']];

という処理が入っていますので関連付けされますが、sfSendOrderMailのほうはそのまま$_POST['template_id']が渡されるため、オフセットしないといけない感じです。

ただsfSendOrderMail側は0、1でつじつまが合うように作られてるようですから、send_typeを取得するときだけtemplate_id+1しなければいけないみたい。


・テンプレートは0からのtemplate_idを使用
・データベースは1からのtemplate_idを使用

というのがそもそも勘違いのもとだと思われます。
homan
投稿日時: 2007/10/2 18:57
対応状況: −−−
仙人
登録日: 2007/7/2
居住地: 宮崎県宮崎市
投稿: 633
Re: 受注管理からのメール通知で{order}の差込がおかしい
メールテンプレートに関する不具合は、1.4.2-betaでも確認できていました。
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=928&forum=8&post_id=2988#forumpost2988

あまりソースを追っかけていないのですが、
ramrunさんがおっしゃるように
引用:

・テンプレートは0からのtemplate_idを使用
・データベースは1からのtemplate_idを使用

が問題じゃないのかな〜と思います。

また、上のURLのスレ内にもありますが、
条件式をちょこちょこ修正したところ、
受注時のメールが1つずれてしまい、
PCで受注したにもかかわらず、
受注テンプレート(携帯用)と表示されるようになってしまいました。
(送られる{order}の内容はPC用みたいなのですが・・・)


また、send_typeを設けているにもかかわらず、
PC用と携帯用のメールテンプレート条件式が
template_id で見ている点もおかしいと思います。


僕も引き続きこの点確認してみます。


----------------
このコミュニティでの投稿はボランティアの範囲に留めさせていただいています。個別の相談やカスタマイズは有償にて承っておりますのでご相談下さい。

[url=http://www.eccube-school.jp/]EC-CUBE

ramrun
投稿日時: 2007/10/3 11:08
対応状況: −−−
仙人
登録日: 2006/11/3
居住地:
投稿: 789
Re: 受注管理からのメール通知で{order}の差込がおかしい
自分のところでやった対策を書いておきます。

まず、slibのsfSendOrderMailについて。

受注完了時の自動送信メールは
template_idが1または2が送られます。

現状では{order}の処理が下記のようになってます。
// 受注動的部分を取得
$body = $objMailView->fetch($arrMAILTPLPATH[$template_id]);
$body = ereg_replace( "(\{order\})", $body ,  $objPage->tpl_body );

$arrMAILTPLPATH[$template_id])の部分は$arrMAILTPLPATH[$send_type])とする必要があります。

またdtb_mailtemplateのsend_typePC用:0、携帯用:1をPC用:1、携帯用:2と変更しておきます。

template_idからsend_typeを取得する必要が出てきますので、受注動的部分の取得は
// 受注動的部分を取得
$where = "template_id = ?";
$arrRet = $objQuery->get("dtb_mailtemplate", "send_type", $where, array($template_id));
$send_type = $arrRet[0]['send_type'];
$body = $objMailView->fetch($arrMAILTPLPATH[$send_type]);
$body = ereg_replace( "(\{order\})", $body ,  $objPage->tpl_body );

としました。

しかしこれだけだと、管理画面の受注管理からメール通知する際にずれます。
管理画面からのテンプレートではtemplate_idが0から始まっているためで、それを1からに変更するためにはSC_FormParam.phpが絡んでくるためいじっては不味そうです。

/html/admin/order/mail.phpにて、case 'change'で行っている処理

//テンプレートファイルで選択されたテンプレート名をテンプレートIDと関連付ける
$_POST['template_id'] = $arrTemplate[0][$_POST['template_id']];

をcase 'send'とcase 'confirm'の処理に追加します。

case 'send'
// メールの送信
if (count($objPage->arrErr) == 0) {
	//テンプレートファイルで選択されたテンプレート名をテンプレートIDと関連付ける
	$_POST['template_id'] = $arrTemplate[0][$_POST['template_id']];
	// 注文受付メール
	sfSendOrderMail($_POST['order_id'], $_POST['template_id'], $_POST['subject'], $_POST['body']);
}


case 'confirm'
	// メールの送信
if (count($objPage->arrErr) == 0) {
	//テンプレートファイルで選択されたテンプレート名をテンプレートIDと関連付ける
	$_POST['template_id'] = $arrTemplate[0][$_POST['template_id']];
	// 注文受付メール(送信なし)
	$objSendMail = sfSendOrderMail($_POST['order_id'], $_POST['template_id'], $_POST['subject'], $_POST['body'], false);
	// 確認ページの表示

これでとりあえず対策できたっぽい気がします...


改造していて気づいたのですが
$objQuery->get("dtb_mailtemplate", "send_type", $where, array($template_id));
$objQuery->select("send_type", "dtb_mailtemplate", $where, array($template_id));

getとselectではテーブルとカラムの引数が逆ですね。

統一したほうがいいように思います。

-----------------------------------------------------------
10/4追記

メールテンプレを更新すると、テンプレからPOSTされてくるのがやはり0、1なので、せっかく1、2にしたsend_typeが戻ってしまいます。

/html/admin/basis/mail.phpで1つ加算しておきました。
function lfConvertParam($array) {
	
    $new_array["send_type"] = $array["send_type"] + 1;
	$new_array["template_id"] = $array["template_id"];

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


 



ログイン

右上バナー


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は73,726名です
総投稿数は102,961件です

投稿数ランキング

1
seasoft
7333
2
468
3131
3
AMUAMU
2712
4
nanasess
2192
5
umebius
2042
6
yuh
1664
7
red
1456
8
h_tanaka
1169
9
tsuji
942
10
fukap
907
11
shutta
835
12
tao_s
794
13 ramrun 789
14 karin 689
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.