なんかどこかで昔に書いたような気がするのだけど、記事が見つけられなかったのでやってみました。
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 というエイリアスを設定するのはやめてほしいなぁ。