基礎から応用まで ~EC-CUBEカスタマイズの全て~ STEP2.2:会員検索カスタマイズ 【アイピーロジック株式会社】
EC-CUBEの開発を始めたい方必見!
当社で行っているEC-CUBE研修を不定期で紹介させていただきます。
今回は「STEP2.2:会員検索カスタマイズ」を紹介します。
STEP2.1:会員登録・編集カスタマイズ
https://ecnomikata.com/column/9830/
STEP1.3:フロント商品詳細カスタマイズ
https://ecnomikata.com/column/9410/
STEP1.2:商品検索カスタマイズ
https://ecnomikata.com/column/8974/
STEP1.1:商品登録・編集カスタマイズ
https://ecnomikata.com/column/8959/
序章
https://ecnomikata.com/column/8635/
課題紹介
研修課題は以下になります。
【課題】
「STEP2.1:会員登録・編集カスタマイズ」で追加したinput項目を検索画面から検索できるようにする。
【追加項目】
text - ニックネーム
select - 住まい(アパート、マンション、戸建て)
radio - ダイレクトメール(希望する、希望しない)
check - 趣味(スポーツ、アウトドア、グルメ、読書、音楽鑑賞、車、ゲーム)
ポイント① 会員検索画面に検索項目を追加
最初に検索項目を追加します。マスターデータ取得、Formクラスの項目追加については、前回の記事を参考にして下さい。ここで重要になるのはラジオボタンの扱いです。ラジオボタンは一度選択すると、未選択状態にすることができません。そのためEC-CUBEの検索処理では、ラジオボタン項目はチェックボックスで検索できるようにしています(一部項目除く)。それでは早速実装に入ります。まず、マスターデータの取得、Formクラスへの項目追加を行います。
▼会員検索PHP - LC_Page_Admin_Customer.php
▼会員情報の登録・編集・検索ヘルパークラス - SC_Helper_Customer.php
該当箇所のみ抜粋しています。LC_Page_Admin_Customer.php の 22~25行目でマスターデータの取得、SC_Helper_Customer.php の 45~49行目でFormクラスへの項目追加を行っています。詳細な説明は前回の記事を参考にして下さい。登録・編集カスタマイズ時は、「ニックネーム」「ダイレクトメール」項目は必須入力項目でしたが、検索時は任意の入力項目としています。
次に会員検索画面への項目追加を行います。Smartyテンプレートは、data/Smarty/templates/admin/customer/index.tpl になります。まず、index.tplをエディタ等で開き、コードを確認して下さい。会員検索画面には検索項目がたくさんありますが、index.tpl には検索項目のコードがほとんど存在しません。その理由は、管理画面で会員検索を行う場所は、会員管理の他にメルマガ管理でも行われます。そのため、会員管理とメルマガ管理で共通のSmartyテンプレートを使用しています。index.tpl の67行目に以下のコードが記載されていると思います。
▼会員検索テンプレート - index.tpl
会員検索画面から、data/Smarty/templates/admin/adminparts/form_customer_search.tpl をincludeしています。includeすることで、form_customer_search.tpl に記載されている内容が、index.tpl へ取り込まれます。それでは、今回の会員検索画面への項目追加は、form_customer_search.tpl へ行えばよいでしょうか?勘の鋭い方であれば既に気づいているかもしれませんが、答えは「No」です。form_customer_search.tpl へ検索項目の追加を行うと、メルマガ管理の検索画面にも同様のコードが反映されます。今回の課題は、会員検索画面への項目追加になりますので、追加項目はindex.tplへ記載するのが正解です。それでは、index.tpl に検索条件を追加してみましょう。
▼会員検索テンプレート - index.tpl
前回の登録・編集カスタマイズとの相違点は、ダイレクトメールのラジオボタン項目を html_checkboxes関数で表示しています。会員検索画面を表示し、以下のように表示が出来ていれば成功です。
▼会員検索画面
ポイント② 会員検索処理
会員検索項目の画面追加は、共通のテンプレート「form_customer_search.tpl」を意識する必要がありました。ということは、検索処理もどこかで共通的に行われているのかな? と考えられた方は非常に勘が鋭いですね。会員検索処理のSQLの組み立ては、data/class/SC_CustomerList.php で行われています。それでは、まず SC_CustomerList.php のコンストラクタを見てみましょう。
▼会員検索用クラス - SC_CustomerList.php
処理が長いため、一部分のみ抜粋しましたが、会員検索項目を追加した場合、SC_CustomerList.php のコンストラクタに検索処理の追加が必要になります。下記のロジックを適切な位置に追加して下さい。
▼会員検索用クラス - SC_CustomerList.php
検索画面から条件を入力した場合のみ、where句に追加を行っています。where句への追加は、setWhere関数、setItemTerm関数を使用しています。プレースホルダへのバインド変数は、$this->arrVal変数を用いています。趣味はチェックボックス項目であり、検索するテーブルが異なります。dtb_customerテーブルとdtb_hobbyテーブルは、会員ID(customer_id)でリレーション関係にありますので、サブクエリを用いてdtb_hobbyテーブルを検索しています。
修正が完了しましたら、様々な条件、組み合わせで検索の動作確認を行って下さい。
次回
以上で「STEP2.2:会員検索カスタマイズ」は終了となります。
次回は「STEP2.3:フロント会員登録・編集カスタマイズ」を紹介させていただきます。