EC-CUBE4のフロントの検索ボックスで商品タグ検索できるようにする方法

EC-CUBE4のフロントの検索ボックスで商品タグ検索できるようにする方法です。

まずCusotomizeディレクトリ内にRepositoryディレクトリを設置してください。

次に以下のようにTagSearchCustomizer.phpを作成してRepository内に設置してください。

<?php

namespace Customize\Repository;

use Eccube\Doctrine\Query\QueryCustomizer;
use Eccube\Doctrine\Query\WhereClause;
use Eccube\Repository\QueryKey;
use Doctrine\ORM\QueryBuilder;
use Eccube\Repository\TagRepository;

/**
 * Description of TagSearchCustomizer
 *
 * @author Akira Kurozumi <info@a-zumi.net>
 */
class TagSearchCustomizer implements QueryCustomizer {

    protected $tagRepository;

    public function __construct(TagRepository $tagRepository)
    {
        $this->tagRepository = $tagRepository;
    }

    public function customize(QueryBuilder $builder, $params, $queryKey)
    {
        if ($params['name']) {
            // タグテーブルから検索キーワードに部分一致するタグを取得
            $result = $this->tagRepository->createQueryBuilder('t')
                    ->where("t.name LIKE :name")
                    ->setParameter("name", '%' . $params['name'] . '%')
                    ->getQuery()
                    ->getResult();

            // QueryBuilderに対してタグを検索対象するように設定
            $builder->innerJoin("p.ProductTag", "pt");
            foreach ($result as $tag) {
                $builder->orWhere("pt.Tag = :Tag");
                $builder->setParameter("Tag", $tag->getId());
            }
        }
    }

    public function getQueryKey(): string
    {
        return QueryKey::PRODUCT_SEARCH;
    }

}

以上で完成です。

これでフロントの検索ボックスにタグを入力して検索するとマッチする商品が表示されます。

3件のコメント

  1. ECCUBE初心者

    いつも拝見しております。ECCUBE初心者です。
    現在ECCUBE4にて開発中でして、こちらの記事を参考にタグ検索を実装しました。
    ただ、廃止ステータスの商品も表示されてしまいます。
    どうすれば廃止ステータスを表示しないようにできるでしょうか?

  2. 非公開や廃止商品の非表示に対応したプラグインをオーナーズストアにて販売しておりますので、
    こちらのプラグインをご検討頂けたらと思います。

    https://www.ec-cube.net/products/detail.php?product_id=1862

  3. ECCUBE初心者

    ご返信ありがとうございます。
    プラグインについて、検討させていただきます。

お気軽にコメントをどうぞ

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください