Labo

EC-CUBE3 分室

【3.0.15】「商品説明」などの内容も検索対象にする方法

2018年02月17日 / 投稿者名:chiharu


さて今回も検索についての内容です。
ここ最近は検索内容に関しての対応を行っています。
そのテストを行っている際に感じた不便さを解消したいと思います。
 
不便さを感じた点はと云うと検索処理を行った際に検索対象となる項目が少なすぎる点です。
EC-CUBE 2系の頃からですが、検索対象となる項目は「商品名」と「検索ワード」だけです。
テストをやってると自然と「商品説明」や「商品コード」の文言で検索を行ってしまい「あれ?」となることが良くありました(笑)
 
全ての項目を対象とする必要は無くても「商品説明」や「商品コード」ぐらいは検索できるようにしたいな~。
と云うことでやってみましょう。
 
■「商品説明」などの内容も検索対象にする方法
 
 ●ファイル
  <インストールフォルダ>/src/Eccube/Repository/ProductRepository.php
 ●モジュール
  getQueryBuilderBySearchData
 ●参考行目
  117行目ぐらいから
  ※
   前回までのカスタマイズ内容は顧慮してません。
   該当ファイルは初期の状態からカスタマイズをしています。
 ●変更内容

        // 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 . '%');
            }
        }

 ↓

        // 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 . '%');
                $qb
                    ->andWhere(sprintf('NORMALIZE(p.name) LIKE NORMALIZE(:%s) OR NORMALIZE(p.search_word) LIKE NORMALIZE(:%s) OR NORMALIZE(p.description_detail) LIKE NORMALIZE(:%s) OR NORMALIZE(p.description_list) LIKE NORMALIZE(:%s) OR NORMALIZE(pc.code) LIKE NORMALIZE(:%s)', $key, $key, $key, $key, $key))
                    ->setParameter($key, '%' . $keyword . '%');
            }
        }

 ●概要説明
  今回は検索条件を追加しただけなので前回よりも簡単かもしれません。
  必要な項目として以下の3項目を追加しています。
   ・商品説明(description_detail)
   ・一覧コメント(description_list)
   ・商品コード(code)
 
  注意する点を挙げるなら変更した行の最後の部分です。
  追加した項目の数分だけ「$key」を追加しておく必要があります。
  最終的には項目の後に記載した「:%s」の数と「$key」の数が合うようにしてください。
 
もう1つの注意点は「商品コード」です。
  大した話では無いのですが「pc.code」となります。
  他の項目「p.*****」とは違い「pc.*****」となるので注意が必要です。
  上記の部分に関しては今回追加した3項目以外を追加する際にも良く確認しましょう。
 
 
これで検索したときに表示される件数が大きく増えると思います。
前回の「OR検索」と併用すれば、何らかの商品は検索結果に表示されるのでは無いでしょうか。
まぁ、最終的には商品情報にどれだけの情報を記述するかによるのですが・・・
運営者の皆さん、検索を重視するときは色々な文言の登録と効果的な検索仕様を検討して下さい。
 
と云うことで今回はこれにて終了です。
次回からは検索以外のところをやってみようかな・・・

コメントを残す

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

* Copy This Password *

* Type Or Paste Password Here *

*

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