基礎から応用まで ~EC-CUBEカスタマイズの全て~ STEP1.2:商品検索カスタマイズ 【アイピーロジック株式会社】

小髙 知彦

EC-CUBEの開発を始めたい方必見!
当社で行っているEC-CUBE研修を不定期で紹介させていただきます。

今回は「STEP1.2:商品検索カスタマイズ」を紹介します。


基礎から応用まで ~EC-CUBEカスタマイズの全て~ STEP1.1:商品登録・編集カスタマイズ
http://ecnomikata.com/column/detail.php?id=8959

基礎から応用まで ~EC-CUBEカスタマイズの全て~ 序章
http://ecnomikata.com/column/detail.php?id=8635

課題紹介

研修課題は以下になります。

【課題】
「STEP1.1:商品登録・編集カスタマイズ」で追加したinput項目を検索画面から検索できるようにする。

【追加項目】
text - メーカーコード
select - 配送種別(通常、大型、冷蔵、冷凍、その他)
radio - 保証期間(1ヶ月、3ヶ月、6ヶ月、12ヶ月)
checkbox - ギフト対応(包装、リボン、メッセージカード)

ポイント① 商品検索画面に検索項目を追加

最初に検索項目を追加します。マスターデータ取得、Formクラスの項目追加については、前回の記事を参考にして下さい。ここで重要になるのはラジオボタンの扱いです。ラジオボタンは一度選択すると、未選択状態にすることができません。そのためEC-CUBEの検索処理では、ラジオボタン項目はチェックボックスで検索できるようにしています(一部項目除く)。それでは早速実装に入ります。検索処理のPHPは、data/class/pages/admin/products/LC_Page_Admin_Products.php になります。まず、マスターデータの取得、Formクラスへの項目追加を行います。

▼商品検索PHP - LC_Page_Admin_Products.php


該当箇所のみ抜粋しています。上記19~21行目でマスターデータの取得、63~67行目でFormクラスへの項目追加を行っています。詳細な説明は前回の記事を参考にして下さい。登録・編集カスタマイズ時は、「配送種別」というselect項目は必須入力項目でしたが、検索時は任意の入力項目としています。次に商品検索画面への項目追加を行います。Smartyテンプレートは、data/Smarty/templates/admin/products/index.tpl になります。検索条件の一番下に下記コードを挿入して下さい。

▼商品検索テンプレート - index.tpl


前回の登録・編集カスタマイズとの相違点は、保証期間のラジオボタン項目を html_checkboxes関数で表示しています。登録・編集カスタマイズで項目追加がしっかり出来ていれば、難しいことは1つもありません。商品検索画面を表示し、以下のように表示が出来ていれば成功です。

▼商品検索画面


ポイント② 商品検索処理

商品検索画面で検索条件を入力し、「この条件で検索する」ボタンを押下すると、$mode変数には「search」が設定されます。検索時のSQLの組み立ては、searchモードのプログラム中から呼び出される、buildQuery関数で行っています。早速、追加項目を組み込んでみましょう。

▼商品検索PHP - LC_Page_Admin_Products.php


WHERE句の条件には$where変数、プレースホルダへのバインド変数には$arrValues変数を用いています。メーカーコードはテキスト項目なので、部分一致検索を行います。sprintf関数で文字列の前後に「%」を連結しています。配送種別はプルダウンなので、完全一致検索を行っています。保証期間は本来はラジオボタンですが、検索項目はチェックボックスですので、チェックされた分だけOR条件で文字列を連結しています。ギフト対応はチェックボックス項目であり、検索するテーブルが異なります。dtb_productsテーブルとdtb_giftテーブルは、商品ID(product_id)でリレーション関係にありますので、サブクエリを用いてdtb_giftテーブルを検索しています。SC_Utils_Ex::repeatStrWithSeparator('?', $count) は、チェックボックスにチェックがされている数だけ、プレースホルダを文字列連結しています。

修正が完了しましたら、様々な条件、組み合わせで検索の動作確認を行って下さい。

ポイント③ 戻る処理

前回に続き、戻る処理の登場です。商品検索画面から他の画面に遷移後、再び商品検索画面に戻った際に、以前に入力した検索条件の情報を保持することが目的です。商品検索画面からは「商品登録画面」「商品規格登録画面」に遷移することが可能です。

それでは実際に動かしてみましょう。検索条件を入力し検索後、各画面へ遷移し検索画面に戻って下さい。商品登録画面のほうは検索条件が保持されていると思いますが、商品規格登録画面から戻った場合、以前に入力した検索条件がクリアされていると思います。ということで、商品規格登録PHPの改修が必要になります。商品規格登録PHPは、data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php になります。

▼商品規格登録PHP - LC_Page_Admin_Products_ProductClass.php


上記23~27行目に項目を追加しています。上記5行目のコメントに「商品マスター検索パラメーター引き継ぎ」と書いてありますが、商品規格登録画面のhidden項目を生成するために、Formクラスに項目を追加しています。

修正後、検索条件が保持されていればOKです。

次回

以上で「STEP1.2:商品検索カスタマイズ」は終了となります。
次回は「STEP1.3:フロント商品詳細カスタマイズ」を紹介させていただきます。


著者

小髙 知彦 (Tomohiko Kodaka)

2000年、システムエンジニアとしてSI企業に新卒入社。オープン系、Web系における大小様々なシステム開発に携わった後、新人教育専任者として約200名のエンジニア育成に勤しむ。退社後、フリーエンジニアを経て、2013年にアイピーロジックに入社。ECサイト構築におけるプロジェクトマネージャー兼EC-CUBEエンジニアの育成責任者としても活躍中。

アイピーロジック株式会社:http://www.iplogic.co.jp/