[EC-CUBE カスタマイズ日誌] 第 8 回 商品名・検索ワード以外の項目でも検索可能にする
最近、冷えは万病の元だなと改めて感じています、ichikawaです。
さて、EC-CUBEカスタマイズの連載第 8 回目は、検索ワード以外の項目でも検索可能にする方法を紹介します。
今回のカスタマイズは、今までの連載中にご紹介したカスタマイズの中でも簡単な部類に入りますので気軽にチャレンジしてみて下さいね。
カスタマイズの概容
「商品検索時に、商品名と検索ワード以外の項目でもヒットするようにする。」
デフォルトでは、商品検索の際の対象項目は、商品情報テーブル(dtb_products)の商品名(name)と検索ワード(comment3)のみです。
今回は、この対象に各種コメント(main_list_comment と main_comment)を追加してみます。
ロジックの修正
商品一覧を取得する際の SQL 文の WHERE 句に、検索対象にしたいカラムを追加するのみで可能になります。
編集するファイルは data/class/pages/products/LC_Page_Products_List.php です。
変更箇所は494 行目付近。
変更前
foreach ($names as $val) {
if ( strlen($val) > 0 ){
// デフォルトは商品名と検索ワード
$where .= " AND ( name ILIKE ? OR comment3 ILIKE ?) ";
$ret = SC_Utils_Ex::sfManualEscape($val);
$arrval[] = "%$ret%";
$arrval[] = "%$ret%";
}
}
変更後
foreach ($names as $val) {
if ( strlen($val) > 0 ){
//$where .= " AND ( name ILIKE ? OR comment3 ILIKE ?) ";
// 各種コメントを追加
$where .= " AND ( name ILIKE ? OR comment3 ILIKE ? OR main_list_comment ILIKE ? OR main_comment ILIKE ?) ";
$ret = SC_Utils_Ex::sfManualEscape($val);
$arrval[] = "%$ret%";
$arrval[] = "%$ret%";
// 増やした検索条件のカラム分、配列の要素を増やす
$arrval[] = "%$ret%"; // main_list_commentの分
$arrval[] = "%$ret%"; // main_commentの分
}
}
続いて編集するファイルは class/db/dbfactory/SC_DB_DBFactory_MYSQL.php です。
変更箇所は 367 行目付近。
仮想 view のような配列の中の vw_products_allclass という要素に検索対象となるカラム名を追加します。
"vw_products_allclass" => '
(SELECT
T2.product_id
,T1.product_code_min
,T1.product_code_max
,T1.price01_min
,T1.price01_max
,T1.price02_min
,T1.price02_max
,T1.stock_min
,T1.stock_max
,T1.stock_unlimited_min
,T1.stock_unlimited_max
,T2.del_flg
,T2.status
,T2.name
,T2.comment1
,T2.comment2
,T2.comment3
,T2.main_list_comment
,T2.main_comment // ← 今回追加したカラム
,T2.main_image
,T2.main_list_image
,T2.product_flag
,T2.deliv_date_id
,T2.sale_limit
,T2.point_rate
,T2.sale_unlimited
,T2.create_date
,T2.deliv_fee
,T3.rank
,T4.rank AS category_rank
,T4.category_id
FROM
(
※ コメントにてご指摘を頂き、2009.12.4 修正いたしました。ありがとうございました。
以上で、カスタマイズは完了です。
上記により、商品検索の際、商品名と検索ワード以外の項目(今回は各種コメント)でもヒットするようになります。