【5分で実装】ECCUBEの管理画面でお届け予定日検索できるようにする
ECCUBE管理画面の受注管理ページで一覧表示する場合に、受注した日や購入情報の更新日では検索できますが、標準では“お届けの予定日”で検索することはできません。
そこで、お届け日の年月日を設定するプルダウンメニューを追加して、データベースのdtb_shippingテーブル、shipping_dateフィールドの日付をもとにお届け日で検索できるようにします。
カスタマイズ実装するのは超簡単で、ファイルは以下の2つを修正するだけです。
ここでは説明の都合上クラスファイルに直接修正を加えますが、拡張ファイルに修正を加えましょう。
修正対象のメソッドをごっそり拡張クラスファイルにコピペすればオーバーライドされます。
<修正対象ファイル>
- /data/class/pages/admin/order/LC_Page_Admin_Order.php
- /data/Smarty/templates/admin/order/index.tpl
「LC_Page_Admin_Order.php」クラスファイルを修正
LC_Page_Admin_Order.phpファイルの180行目あたりにある「LfInitParam()」メソッドに、検索時のパラメーターの値を保持する設定を追記します。
// 更新日 $objFormParam->addParam('開始年', 'search_supdateyear', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('開始月', 'search_supdatemonth', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('開始日', 'search_supdateday', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('終了年', 'search_eupdateyear', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('終了月', 'search_eupdatemonth', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK')); $objFormParam->addParam('終了日', 'search_eupdateday', INT_LEN, 'n', array('MAX_LENGTH_CHECK', 'NUM_CHECK'));
つづいて230行目くらいにある「lfCheckError()」メソッドに入力値チェックを入れます。
// 更新日 $objErr->doFunc(array('開始', 'search_supdateyear', 'search_supdatemonth', 'search_supdateday'), array('CHECK_DATE')); $objErr->doFunc(array('終了', 'search_eupdateyear', 'search_eupdatemonth', 'search_eupdateday'), array('CHECK_DATE')); $objErr->doFunc(array('開始', '終了', 'search_supdateyear', 'search_supdatemonth', 'search_supdateday', 'search_eupdateyear', 'search_eupdatemonth', 'search_eupdateday'), array('CHECK_SET_TERM'));
次に260行目辺りの「buildQuery()」メソッドを入れてSQL文を完成させます。
switch文の一部になりますので、すこし注意しながら追記してください。
// お届予定日 case 'search_ssendyear': $date = SC_Utils_Ex::sfGetTimestamp($objFormParam->getValue('search_ssendyear'), $objFormParam->getValue('search_ssendmonth'), $objFormParam->getValue('search_ssendday')); $where.= ' AND EXISTS (SELECT 1 FROM dtb_shipping sp WHERE sp.order_id = dtb_order.order_id AND sp.shipping_date >= ?)'; $arrValues[] = $date; $dbflag = 1; break; case 'search_esendyear': $date = SC_Utils_Ex::sfGetTimestamp($objFormParam->getValue('search_esendyear'), $objFormParam->getValue('search_esendmonth'), $objFormParam->getValue('search_esendday'), true); $where.= ' AND EXISTS (SELECT 1 FROM dtb_shipping sp WHERE sp.order_id = dtb_order.order_id AND sp.shipping_date <= ?)'; $arrValues[] = $date; $dbflag = 1; break;
「index.tpl」テンプレートファイルを修正
つづいて、受注管理ページのテンプレートファイルを修正します。
280行目あたり、「更新日」の検索設定プルダウンメニューの下に行を追加します。
<tr> <th>お届け日</th> <td colspan="3"> <!--{if $arrErr.search_ssendyear}--><span class="attention"><!--{$arrErr.search_ssendyear}--></span><!--{/if}--> <!--{if $arrErr.search_esendyear}--><span class="attention"><!--{$arrErr.search_esendyear}--></span><!--{/if}--> <select name="search_ssendyear" style="<!--{$arrErr.search_ssendyear|sfGetErrorColor}-->"> <option value="">----</option> <!--{html_options options=$arrRegistYear selected=$arrForm.search_ssendyear.value}--> </select>年 <select name="search_ssendmonth" style="<!--{$arrErr.search_ssendyear|sfGetErrorColor}-->"> <option value="">--</option> <!--{html_options options=$arrMonth selected=$arrForm.search_ssendmonth.value}--> </select>月 <select name="search_ssendday" style="<!--{$arrErr.search_ssendyear|sfGetErrorColor}-->"> <option value="">--</option> <!--{html_options options=$arrDay selected=$arrForm.search_ssendday.value}--> </select>日~ <select name="search_esendyear" style="<!--{$arrErr.search_esendyear|sfGetErrorColor}-->"> <option value="">----</option> <!--{html_options options=$arrRegistYear selected=$arrForm.search_esendyear.value}--> </select>年 <select name="search_esendmonth" style="<!--{$arrErr.search_esendyear|sfGetErrorColor}-->"> <option value="">--</option> <!--{html_options options=$arrMonth selected=$arrForm.search_esendmonth.value}--> </select>月 <select name="search_esendday" style="<!--{$arrErr.search_esendyear|sfGetErrorColor}-->"> <option value="">--</option> <!--{html_options options=$arrDay selected=$arrForm.search_esendday.value}--> </select>日 </td> </tr>
以上で完了です。
あとは管理画面の「受注管理」からお届け日検索を実行してみてください。
追記に間違いがなければ、指定した日付で一覧が表示されるはずです。
もはやデファクトになりつつある、phpフレームワーク「laravel」
開発が楽になります。
Laravel リファレンス[Ver.5.1 LTS 対応] Web職人好みの新世代PHPフレームワーク
いつも読んでくれてありがとね!