バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 商品検索で複数のカテゴリを選択したい

フロント機能

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
goichi
投稿日時: 2020/7/20 12:00
対応状況: 解決済
新米
登録日: 2020/7/18
居住地:
投稿: 6
Re: 商品検索で複数のカテゴリを選択したい
お返事ありがとうございます。

引用:
SearchProductType.php でcategory_idを 'multiple' => trueにする

いただいたヒントを元に、以下のように処理を書き換えました。(一応、動いていますので、どなたかの参考になればと思い晒しておきます・・・)


1)SearchProductType.phpの54行目付近から始まる処理に'multiple' => trueを追記して以下のようにした。
$builder->add('category_id', EntityType::class, [
            'class' => 'Eccube\Entity\Category',
            'choice_label' => 'NameWithLevel',
            'choices' => $Categories,
            'placeholder' => 'common.select__all_products',
            'required' => false,
            'multiple' => true
]);



2)ProductRepositry.phpの140行目付近から始まる、カテゴリ情報を受け取る箇所を以下のように変更した。
if (!empty($searchData['category_id']) && $searchData['category_id']) {
            //配列で操作したいので、カテゴリIDの入ったオブジェクトを配列化する。
            $targetCategories = $searchData['category_id']->toArray();

            //配列化したカテゴリ情報を順番に再帰処理する。
            for ($i=0;$i<count($targetCategories);$i++){
              //親カテゴリが選択されたときなどに対応するため、子孫カテゴリを確認する処理が入っているらしい。
              //今回配列になっているので、ここで一つ一つのカテゴリ情報を処理しておく。
              $targetCategoryObject = $searchData['category_id']->get($i);
              $Categories[] = $targetCategoryObject->getSelfAndDescendants();
            }

            //検索対象になるカテゴリIDをクエリビルダーにセットするため、ここで配列にしたい。
            //再帰処理から返ってきたものには子孫IDを持っているものがあるので、ループして順番に $targetCategoriesId にIDを渡していく。
            foreach ($Categories as $data){
              for($i=0;$i<count($data);$i++){
                $targetCategoriesId[] = $data[$i]->getId();
              }
            }

            //同じカテゴリIDがGETパラメータに与えられた際、重複するものがあるので一応整理しておく。
            $targetCategoriesId = array_unique($targetCategoriesId);
            $targetCategoriesId = array_values($targetCategoriesId);

            //カテゴリ条件をクエリビルダーに追加して検索させる。
            if (count($targetCategoriesId) > 0) {
              $qb
                ->innerJoin('p.ProductCategories', 'pct')
                ->innerJoin('pct.Category', 'c')
                ->andWhere($qb->expr()->in('pct.Category', ':Categories'))
                ->setParameter('Categories', $targetCategoriesId);
                $categoryJoin = true;
            }
}



3)View側でカテゴリ情報をそのまま利用している箇所があるが、配列になっていることを想定していないので、それらを削除した。(list.twig)


もっと上手いやり方があるかも知れませんが、メモとして残しておきたいと思います。ご回答ありがとうございました。
フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
   商品検索で複数のカテゴリを選択したい goichi 2020/7/18 13:45
     Re: 商品検索で複数のカテゴリを選択したい umebius 2020/7/19 0:42
     » Re: 商品検索で複数のカテゴリを選択したい goichi 2020/7/20 12:00

 



ログイン


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

統計情報

総メンバー数は89,006名です
総投稿数は110,020件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1296
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.