EC-CUBEの受注管理画面で発送日などのカラムを追加して検索できるようにする
EC-CUBEを使っていて管理画面で検索項目を追加して自分の望むデータを一覧表示してみたい時ありますよね。
案外手間がかかります。
でも修正すべき箇所をおさえて、検索対象となるデータベースの対象テーブルがわかればそんなに難しくはありません。
今回は『受注管理』のページで、検索項目に発送日を追加してデータを表示する方法です。
修正すべきファイルなど
まず、ER図はこんな感じです。
修正する対象ファイルは以下の2ファイルです。
インターフェース部分のテンプレート
・/data/Smarty/templates/admin/order/index.tpl
ロジック修正
・/data/class/pages/admin/order/LC_Page_Admin_Order.php
本来はclass_extendsをいじりましょう。
今回は素早く実装するためにclassの親ファイルを修正しますが、
必ずバージョンアップ対策のためにextensを使いましょう。
修正前はこんな感じ。
修正後は以下の画像のような結果が表示されます。
テンプレート及びロジックファイルを修正
では修正対象のファイルをそれぞれ見てみましょう。
index.tpl
・263行目辺り
<tr> <th>配送日・発送日</th> <td colspan="3"> <!--{if $arrErr.search_sshippingyear}--><span class="attention"><!--{$arrErr.search_sshippingyear}--></span><!--{/if}--> <!--{if $arrErr.search_eshippingyear}--><span class="attention"><!--{$arrErr.search_eshippingyear}--></span><!--{/if}--> <select name="search_sshippingyear" style="<!--{$arrErr.search_sshippingyear|sfGetErrorColor}-->"> <option value="">----</option> <!--{html_options options=$arrRegistYear selected=$arrForm.search_sshippingyear.value}--> </select>年 <select name="search_sshippingmonth" style="<!--{$arrErr.search_sshippingyear|sfGetErrorColor}-->"> <option value="">--</option> <!--{html_options options=$arrMonth selected=$arrForm.search_sshippingmonth.value}--> </select>月 <select name="search_sshippingday" style="<!--{$arrErr.search_sshippingyear|sfGetErrorColor}-->"> <option value="">--</option> <!--{html_options options=$arrDay selected=$arrForm.search_sshippingday.value}--> </select>日~ <select name="search_eshippingyear" style="<!--{$arrErr.search_eshippingyear|sfGetErrorColor}-->"> <option value="">----</option> <!--{html_options options=$arrRegistYear selected=$arrForm.search_eshippingyear.value}--> </select>年 <select name="search_eshippingmonth" style="<!--{$arrErr.search_eshippingyear|sfGetErrorColor}-->"> <option value="">--</option> <!--{html_options options=$arrMonth selected=$arrForm.search_eshippingmonth.value}--> </select>月 <select name="search_eshippingday" style="<!--{$arrErr.search_eshippingyear|sfGetErrorColor}-->"> <option value="">--</option> <!--{html_options options=$arrDay selected=$arrForm.search_eshippingday.value}--> </select>日 </td> </tr>
・336行目辺りに追記
<th>配送日・発送日</th>
・353行目辺りに追記
<td class="center"><!--{$arrResults[cnt].shipping_date}--></td>
LC_Page_Admin_Order.php
・119行目辺りを修正
後ほどクエリ文に配送日データのカラムである「dtb_shipping」カラムをLEFT JOINするのですが、「dtb_order」にも「dtb_shipping」にもdel_flgフィールドがあるので、where句に設定するパラメータのdel_flgフィールドがどちらなのかを明示してやる必要があります(コメントアウトしたものが元のコード)。
//$where = "del_flg = 0"; $where = 'dtb_order.del_flg = 0';
・127行目辺りに追記
ここも上と同様で、update_dateがどちらのフィールドなのか明示します(コメントアウトしたものが元のコード)。
//$order = "update_date DESC"; $order = 'dtb_order.update_date DESC';
・220行目辺りに追記
検索の入力フォームから各プロパティ名で渡ってきたデータを受取って初期化します。
// 配達・発送の日付 $objFormParam->addParam('開始年', 'search_sshippingyear', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('開始月', 'search_sshippingmonth', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('開始日', 'search_sshippingday', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('終了年', 'search_eshippingyear', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('終了月', 'search_eshippingmonth', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('終了日', 'search_eshippingday', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'));
・248行目辺りに追記
入力されたデータのチェックを行います。
// 受注日 $objErr->doFunc(array('開始', 'search_sshippingyear', 'search_sshippingmonth', 'search_sshippingday'), array('CHECK_DATE')); $objErr->doFunc(array('終了', 'search_eshippingyear', 'search_eshippingmonth', 'search_eshippingday'), array('CHECK_DATE')); $objErr->doFunc(array('開始', '終了', 'search_sshippingyear', 'search_sshippingmonth', 'search_sshippingday', 'search_eshippingyear', 'search_eshippingmonth', 'search_eshippingday'), array('CHECK_SET_TERM'));
・385行目辺りに追記
switch – case文内に、検索条件のwhere句を追加するためのcase文を追記します。
case 'search_sshippingyear': $date = SC_Utils_Ex::sfGetTimestamp($objFormParam->getValue('search_sshippingyear'), $objFormParam->getValue('search_sshippingmonth'), $objFormParam->getValue('search_sshippingday')); $where.= ' AND dtb_shipping.shipping_date >= ?'; $arrValues[] = $date; break; case 'search_eshippingyear': $date = SC_Utils_Ex::sfGetTimestamp($objFormParam->getValue('search_eshippingyear'), $objFormParam->getValue('search_eshippingmonth'), $objFormParam->getValue('search_eshippingday'), true); $where.= ' AND dtb_shipping.shipping_date <= ?'; $arrValues[] = $date; break;
・438行目辺り
検索に「dtb_shipping」カラムをLEFT JOINするためにreturn文を修正します(コメントアウトしたものが元のコード)。
//return $objQuery->count('dtb_order', $where, $arrValues); return $objQuery->count('dtb_order LEFT JOIN dtb_shipping ON dtb_order.order_id = dtb_shipping.order_id', $where, $arrValues);
・456行目辺り
検索に「dtb_shipping」カラムをLEFT JOINするためにreturn文を修正します(コメントアウトしたものが元のコード)。
//return $objQuery->select('*', 'dtb_order', $where, $arrValues); return $objQuery->select('*', 'dtb_order LEFT JOIN dtb_shipping ON dtb_order.order_id = dtb_shipping.order_id', $where, $arrValues);
Laravel リファレンス[Ver.5.1 LTS 対応] Web職人好みの新世代PHPフレームワーク