Labo

[EC-CUBE 2.12.2] 商品検索ブロックで、商品コードで検索したい

2012年12月22日 / 投稿者名:fukap


なんかどこかで昔に書いたような気がするのだけど、記事が見つけられなかったのでやってみました。
dtb_products の中に含まれる要素だと簡単に検索項目に追加できるのですが、
これが dtb_products_class に含まれる要素を使いたいとなると、難易度が一段上がります。

 

ポイントは、検索対象テーブルにdtb_products_classを加えるSQLを書けるかどうかと、
条件句に product_code を追加できるかですね。
以下のような方法で一応実現できました。

 

1.data/class/pages/products/LC_Page_Products_List.php の lfGetSearchCondition メソッドで以下の部分を修正

// 分割したキーワードを一つずつwhere文に追加
foreach ($names as $val) {
    if (strlen($val) > 0) {
        $searchCondition['where']    .= ' AND ( alldtl.name ILIKE ? OR alldtl.comment3 ILIKE ? OR pc.product_code ILIKE ?) ';
        $searchCondition['arrval'][]  = "%$val%";
        $searchCondition['arrval'][]  = "%$val%";
        $searchCondition['arrval'][]  = "%$val%";
    }
}

2.data/class/SC_Product.php の findProductIdsOrder と findProductCount メソッドで以下の部分を修正

        $table = <<< __EOS__
            dtb_products AS alldtl LEFT JOIN dtb_products_class as pc ON alldtl.product_id = pc.product_id
__EOS__;

いつも思うけど、dtb_products に alldtl というエイリアスを設定するのはやめてほしいなぁ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

* Copy This Password *

* Type Or Paste Password Here *

*

コメント欄にコードを挿入したい場合は、[php][/php] を使ってください。