【検索カスタマイズ】EC-CUBE3で価格帯絞り込み実装方法

公開日 :

ECコーディング

EC-CUBEのカスタマイズ方法は下記のフォーラムで質問、もしくはすでに回答されている項目を参考に実装していく必要があります。
https://xoops.ec-cube.net/

フォーラム以外では超有名CMSのWordPressほどたくさんの人が解説しているわけではないので、Googleで検索しても自分が実装したいことを解説している記事も少なく、初心者にとってはEC-CUBEのカスタマイズは結構ハードルが高かったりします。

今回はよくカスタマイズで頼まれるであろう、下記のような商品の価格帯での絞り込みの実装方法を解説したいと思います。

<価格帯でさがす>
0-2000円
2000-4000円
4000-6000円
6000-8000円

【検索系修正】

価格帯に限らず、検索系の修正は下記をファイルをそれぞれ変更することになります。

  • src/Eccube/Form/Type/SearchProductType.php
  • src/Eccube/Form/Type/SearchProductBlockType.php
  • src/Eccube/Repository/ProductRepository.php

価格帯絞り込みの場合は具体的にどのように修正していけばよいか説明致します。

src/Eccube/Form/Type/SearchProductType.phpを修正

55行目付近に書いてるpublic function buildForm(FormBuilderInterface $builder, array $options)内部に下記を追加します。

$builder->add('price_id', 'search', array(
            'required' => false,
            'empty_data' => null,
        ));

src/Eccube/Form/Type/SearchProductBlockType.phpを修正

52行目付近に書いてるpublic function buildForm(FormBuilderInterface $builder, array $options)内部に下記を追加します。

$builder->add('price_id', 'search', array(
            'required' => false,
            'empty_data' => null,
        ));

src/Eccube/Repository/ProductRepository.phpを修正

97行目付近に書いてあるpublic function getQueryBuilderBySearchData($searchData)内部に下記を追加します。
name検索の下の方に記述すると良いかと思います。

$priceJoin = false;
        if (!empty($searchData['price_id']) && $searchData['price_id']) {
            $price_id = $searchData['price_id'];
            $price_min = 0;
            $price_max = 999999;
            if($price_id == 1){
                $price_min = 0;
                $price_max = 2000;
                } elseif ($price_id == 2){
                    $price_min = 2000;
                    $price_max = 4000;
                }elseif ($price_id == 3){
                    $price_min = 4000;
                    $price_max = 6000;
                }elseif ($price_id == 4){
                    $price_min = 6000;
                    $price_max = 8000;
                }
                $qb
                ->innerJoin('p.ProductClasses', 'pcp')
                ->andWhere('pc.price02 > :price_min')
                ->andWhere('pc.price02 < :price_max')
                ->setParameter('price_min', $price_min)
                ->setParameter('price_max', $price_max);
       $priceJoin = true;
}

以上、3ファイルを修正することで検索機能を実装することが出来ます。
最後に検索機能を追加したいファイルを修正します。
基本的には下記ファイルになってくるのかなと思います。

  • /src/Eccube/Resource/template/deault/Block/search_product.twig

単純に<0〜2000円>という項目をリンク先にする場合には今回作ったprice_idに数値を渡して上げて検索すると絞り込み結果が表示されます。
例:

<a href="/html/products/list?price_id=1">0〜2000円</a>

複数の検索条件と組み合わせたい場合はselectタグなどでvalueに数値を設定して、一度にパラメーターを渡して上げると良いかと思います。

まとめ

EC-CUBEのカスタマイズは情報も少なく、調べても答えが見つからず苦労することが多いかと思います。
フォーラムも利用しながら、少しずる自分の出来る範囲を広げていくとよいかと思います。

弊社ではWordPressやEC-CUBEのカスタマイズの実績を豊富にもっております!
お困りの際はお気軽にご相談下さいませ!

案件のご相談はこちらから!お気軽に

この記事をシェア

  • Twitter
  • Facebook
  • hatena-bookmark

合わせて読みたい