EC-CUBEの受注管理画面に伝票番号の欄を追加してみる
久しぶりの更新です。
毎日毎日、自分の不甲斐なさを反省していたら月日が経ってしまっていました。
周りに迷惑をかけてしまっているってわかってるのに・・・
さて、気を取り直して!!
久しぶりのブログはというと、EC-CUBEの受注管理画面のカスタマイズをしてみたので覚え書きをします。
ゴール
EC-CUBEで受注ステータスを発送済みにしたら、自動的にメールを「発送済みメール」を送るという機能を実装します。
環境
EC-CUBE 2.13.3
■まずは、受注管理画面に入力欄を追加します。
受注管理の編集画面に配送伝票番号を入力する欄を追加します。
こんな感じ。
まずはインターフェース側のテンプレートファイルを変更します。
/data/Smarty/templates/admin/order/edit.tpl
<!--{if $tpl_mode != 'add'}--> <tr> <th>配送伝票番号</th> <td> <!--{assign var=key value="deliv_no"}--> <span class="attention"><!--{$arrErr[$key]}--></span><input type="text" name="<!--{$key}-->" value="<!--{$arrForm[$key].value|escape}-->" size="80" maxlength="<!--{$arrForm[$key].length}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" /> </td> </tr> <!--{/if}-->
と任意の場所にいれます。
次は
/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php
を編集します。
$objFormParam->addParam('配送伝票番号', 'deliv_no', STEXT_LEN, 'KVa', array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
実際の関数はこうなっているみたいです。
function addParam($disp_name, $keyname, $length = "", $convert = "", $arrCheck = array(), $default = "", $input_db = 'true')
- $disp_name は画面のラベルだったりエラーメッセージに使うもの
- $keyname はHTMLのinputなどのnameの値
- $length は文字列の長さ
STEXT_LENは50文字まで、MTEXT_LENは200文字までみたいです。 - $convert は mb_convert_kanaを行なっているみたいですので、そのオプションになります。
KVaは半角カタカナを全角カタカナに、全角英数字を半角に変換します。
詳しくはphpマニュアルを参照 - $arrCheck は定義されたバリデーション名。
/data/class/SC_CheckError.php
ここに書かれています。
SPTAB_CHECKはスペース、タブの判定
MAX_LENGTH_CHECKは最大文字数のチェック
参考:DYO.JP ver.2 - $default は空の場合のデフォルト値
- $input_db はデータベースに登録するか否かをtrue , falseで指定します。
で、上書きアップロードすると入力欄ができてます。
■dtb_orderテーブルにカラムを追加。
この入力欄で挿入されたものを保存するカラムをDBに作成します。
phpMyAdminを使用しているので、管理画面から・・・
使用しているテーブルの、dtb_orderを選択して、上部の「構造」ボタンを押します。
下のほうにカラムを追加する場所があるので1個のカラムを追加するを選択し実行。
実行を押すと画面が切り替わります。
それぞれに入力していきます。
名前:deliv_no
データ型:text
照合順序:utf8_general_ci
NULL:はい
デフォルト値:NULL
保存。
たぶん大丈夫。
間違ってたら教えてください。
■発送済みメールのテンプレートを作成
sendcomp_mail.tplという名前でファイルを作成し、下記にアップロード
/data/Smarty/templates/テンプレートフォルダ/mail_templates/
んで、管理画面からメールテンプレートの設定をします。
システム設定 → マスターデータ管理から。
・mtb_mail_template を選んで「選択」ボタンを押す。
※僕の場合は IDが5まで使用していたのでIDを6、値を 発送完了メールとして登録
・mtb_mail_tpl_pathを選択して ID6のところに「mail_templates/sendcomp_mail.tpl」と入れました。
※ご自身の環境に合わせて適宜変更してください。
■発送済みメールに伝票番号を表示
sendcomp_mail.tplには配送番号を表示するためのコードをいれます。
<!--{$arrOrder.deliv_no}-->
他にも色々と入れる情報があると思うので、そこは適宜。
■ステータスを発送済みにしたら「発送済みメール」を自動送信する
/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php
の
$objQuery->commit();
のあとに発送済みの場合は自動で発送済みメールを送る指示を書きます。
if($arrValues['status'] == ORDER_DELIV) { $objMail = new SC_Helper_Mail_Ex(); $objSendMail = $objMail->sfSendOrderMail($order_id, 6); }
とりあえずこの5ステップで実装はできました。
実際に購入してみて、ステータスを発送済みにして、追加した項目に伝票番号を入れてドキドキしながら保存。
メールキター!!!
受注管理画面で保存ボタンを押すとそのままメールが送信されてしまうので、少し怖いですがなんとか完了しました。
取りあえず機能は付けられたけど、他に正しいやり方がありそうですね・・・
それにしてもこのブログ、見難いですw