【EC-CUBE3】検索フォームで商品コードやフリーエリアの内容を検索できるようにする方法
EC-CUBE
|
2017.09.23
【EC-CUBE3】検索フォームで商品コードやフリーエリアの内容を検索できるようにする方法
ECCUBE3のデフォルトで用意されている検索フォームには、
カテゴリ検索とフリーワード検索が行える機能が用意されています。
フリーワード検索に入力して検索する場合、
検索対象になるのが、管理画面の商品登録画面から設定する「商品名」と「検索ワード」が対象となります。
「検索ワード」に設定すれば検索できるといっても入力するのが面倒なので、
その他の項目で入力した内容も検索対象としてみたいと思います。
商品コードやフリーエリアの内容を検索対象にする方法
修正するファイルは以下ファイルです。
/src/Eccube/Repository/ProductRepository.php
123行目付近に以下記述がありますので、以下のように修正してください。
※修正しているのは、以下の8行目だけです。
修正前
1 2 3 4 5 6 7 8 9 10 11 |
// name if (isset($searchData['name']) && Str::isNotBlank($searchData['name'])) { $keywords = preg_split('/[\s ]+/u', $searchData['name'], -1, PREG_SPLIT_NO_EMPTY); foreach ($keywords as $index => $keyword) { $key = sprintf('keyword%s', $index); $qb ->andWhere(sprintf('NORMALIZE(p.name) LIKE NORMALIZE(:%s) OR NORMALIZE(p.search_word) LIKE NORMALIZE(:%s)', $key, $key)) ->setParameter($key, '%' . $keyword . '%'); } } |
修正後
1 2 3 4 5 6 7 8 9 10 11 |
// name if (isset($searchData['name']) && Str::isNotBlank($searchData['name'])) { $keywords = preg_split('/[\s ]+/u', $searchData['name'], -1, PREG_SPLIT_NO_EMPTY); foreach ($keywords as $index => $keyword) { $key = sprintf('keyword%s', $index); $qb ->andWhere(sprintf('NORMALIZE(p.name) LIKE NORMALIZE(:%s) OR NORMALIZE(p.search_word) LIKE NORMALIZE(:%s) OR NORMALIZE(p.description_list) LIKE NORMALIZE(:%s) OR NORMALIZE(p.description_detail) LIKE NORMALIZE(:%s) OR NORMALIZE(p.free_area) LIKE NORMALIZE(:%s) OR NORMALIZE(pc.code) LIKE NORMALIZE(:%s)', $key, $key, $key, $key, $key, $key)) ->setParameter($key, '%' . $keyword . '%'); } } |
修正方法としては、ORで条件を繋げているだけなのでそれほど難しくないと思います。
1点注意としては、クエリに割り当てたい変数の記述漏れは注意しましょう。
今回であれば、「$key」です。
ORで繋げた分追加しましょう。