バージョン選択

フォーラム

メニュー

オンライン状況

73 人のユーザが現在オンラインです。 (66 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 73
もっと...

サイト内検索

機能要望 > その他 > 複数窓でOR検索

その他

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
YOHBUN
投稿日時: 2016/12/20 16:24
対応状況: −−−
常連
登録日: 2016/12/20
居住地:
投稿: 69
複数窓でOR検索
EC CUBE 3系で
キーワード検索窓を複数設置した
検索に対応させる方法を教えてください。
窓は5つ設置したいと思っています。
ひとつの窓でOR検索ではなく複数窓を希望しています。
hiroo
投稿日時: 2016/12/22 10:55
対応状況: −−−
長老
登録日: 2016/6/9
居住地:
投稿: 160
Re: 複数窓でOR検索
複数窓を設置して、それぞれに入力したキーワードでOR検索をさせたい、ということでしょうか?
YOHBUN
投稿日時: 2016/12/26 16:23
対応状況: −−−
常連
登録日: 2016/12/20
居住地:
投稿: 69
Re: 複数窓でOR検索
ありがとうございます。
そういうことで、間違いないです!
hiroo
投稿日時: 2016/12/26 21:56
対応状況: −−−
長老
登録日: 2016/6/9
居住地:
投稿: 160
Re: 複数窓でOR検索
簡略化のため、窓二つでの説明とさせてください。(3.0.12pの場合)

まず、窓を追加します。

src/Eccube/Form/Type/SearchProductBlockType.phpにname2を追加します。

        $builder->add('name2', 'search', array(
            'required' => false,
            'label' => '商品名2を入力',
            'empty_data' => null,
            'attr' => array(
                'maxlength' => 50,
            ),
        ));


src/Eccube/Resource/template/default/Block/search_product.twigにname2を追加します。

<div class="input_search clearfix">
                    {{ form_widget(form.name, {'attr': { 'placeholder' : "キーワードを入力" }} ) }}
                    {{ form_widget(form.name2, {'attr': { 'placeholder' : "キーワードを入力" }} ) }}
                    <button type="submit" class="bt_search"><svg class="cb cb-search"><use xlink:href="#cb-search" /></svg></button>
                </div>


これで検索窓が二つ表示されます。(デザインはさておき)
次にOR検索に対応します。

src/Eccube/Form/Type/SearchProductType.phpにname2を追加します。

        $builder->add('name2', 'search', array(
            'required' => false,
            'label' => '商品名を入力',
            'empty_data' => null,
            'attr' => array(
                'maxlength' => 50,
            ),
        ));


src/Eccube/Repository/ProductRepository.phpのgetQueryBuilderBySearchData()を改修します。
94行目付近のnameでの検索箇所を以下のように書き換えます

        // 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('p.name LIKE :%s OR p.search_word LIKE :%s', $key, $key))
                    ->setParameter($key, '%' . $keyword . '%');
            }
        }
        */
        $search = array();
        if (isset($searchData['name']) && Str::isNotBlank($searchData['name'])) {
            $qb
                ->setParameter('name', '%' . $searchData['name'] . '%');
            $search[] = 'p.name LIKE :name OR p.search_word LIKE :name';
        }
        if (isset($searchData['name2']) && Str::isNotBlank($searchData['name2'])) {
            $qb
                ->setParameter('name2', '%' . $searchData['name2'] . '%');
            $search[] = 'p.name LIKE :name2 OR p.search_word LIKE :name2';
        }
        if (count($search) > 0) {
            $qb
                ->andWhere(implode(' OR ', $search));
        }


これで二つ窓でのOR検索ができると思います。
※この改修ではスペースでのAND検索は機能しません
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,865名です
総投稿数は109,998件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1295
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.