0
1

More than 1 year has passed since last update.

EC-CUBE4.2で商品一覧に会員限定商品のみフィルターを追加する

Posted at

概要

会員限定機能を追加できるプラグインを作成しました。
https://www.ec-cube.net/products/detail.php?product_id=2671

こちらに会員限定商品のみをプラグインやコアファイルを弄ることなく一覧で表示する方法のご紹介です。

「mtb_product_list_order_by」テーブルに1項目を追加する

Cusotomizeディレクトリ内にRepositoryディレクトリを設置する

追加したディレクトリにProductWhereAdd.phpを追加する

ProductWhereAdd.php
<?php
namespace Customize\Repository;

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

class ProductWhereAdd implements QueryCustomizer {

    public function customize(QueryBuilder $builder, $params, $queryKey)
    {
        if(!empty($params["orderby"]) && $params["orderby"]->getId() === 4) {
            //Whereだとカテゴリー時にエラーになるのでandで指定
            $builder->andWhere("p.only_member = 1");
        }
    }

    public function getQueryKey(): string
    {
        // 適用したいメソッドを指定することで、自動的に有効になる。ドキュメント参照
        //https://doc4.ec-cube.net/customize_repository
        return QueryKey::PRODUCT_SEARCH;
    }
}

参考にしたドキュメントやサイト

プラグインにその機能を含める場合はプラグイン削除の処理等を考えるとちょっと面倒でして、Cusotomizeディレクトリからカスタマイズしたほうがスマートだと思いプラグインには機能を含めませんでした。

含める場合の参考処理

インストール時に、「mtb_product_list_order_by」テーブルに1項目追加する
追加したidを取得してプラグインで定義したオリジナルのテーブルにリレーションを貼る
プラグイン削除時にオリジナルのテーブルからリレーション先の「mtb_product_list_order_by」を辿って、追加した項目だけを削除

「mtb_product_list_order_by」に判定用のカラム追加でもいいですが、なるべくEC CUBEデフォルトのテーブルは触りたくないところなので、このような処理になると思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1