Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

フロント側での商品情報表示を制御する拡張機構 #4995

Closed
wants to merge 3 commits into from

Conversation

kiy0taka
Copy link
Contributor

@kiy0taka kiy0taka commented Apr 1, 2021

概要(Overview・Refs Issue)

デフォルトでは商品情報はステータス(公開/非公開/廃番)によってフロントでの表示/非表示を切り替えているが、プラグインやカスタマイズで他の条件で表示制御を拡張できるようにする。

方針(Policy)

商品の可視性を定義する抽象クラスProductVisibilityを追加

https://github.com/kiy0taka/ec-cube/blob/5f956d8506a496c15e6e80e5538a00bc2ef73645/src/Eccube/Service/Product/ProductVisibility.php

実装するメソッドは2つ

  • checkVisibility(Product)
    • 商品単体の可視性を判定する
  • createStatements($params, $queryKey)
    • WhereCustomizer で定義しているメソッド
    • 一覧検索時の条件を追加する

すべてのProductVisibilityが表示を許可しないとフロントに表示されない。

実装サンプル

デフォルトの商品ステータスでの表示制御

https://github.com/EC-CUBE/ec-cube/blob/1b1a3b28cd79cd67e30b793f9d3290a45937487a/src/Eccube/Service/Product/StatusVisibility.php

#4852 のサンプル実装

https://github.com/kiy0taka/ec-cube/blob/5f956d8506a496c15e6e80e5538a00bc2ef73645/src/Eccube/Service/Product/PublishTermVisibility.php

実装に関する補足(Appendix)

テスト(Test)

相談(Discussion)

マイナーバージョン互換性保持のための制限事項チェックリスト

  • 既存機能の仕様変更
  • フックポイントの呼び出しタイミングの変更
  • フックポイントのパラメータの削除・データ型の変更
  • twigファイルに渡しているパラメータの削除・データ型の変更
  • Serviceクラスの公開関数の、引数の削除・データ型の変更
  • 入出力ファイル(CSVなど)のフォーマット変更

レビュワー確認項目

  • 動作確認
  • コードレビュー
  • E2E/Unit テスト確認(テストの追加・変更が必要かどうか)
  • 互換性が保持されているか
  • セキュリティ上の問題がないか

@okazy okazy added this to the 4.1 milestone Apr 6, 2021
@okazy
Copy link
Contributor

okazy commented Apr 6, 2021

experimental のラベルをつけさせていただきました。
こちらは拡張機構の追加ということでフレームワークの強化となるので、取り込む際は 4.1-core へでもいいかと思いました。

@okazy
Copy link
Contributor

okazy commented Apr 7, 2021

Issue検討会にて以下の課題が出ました

関連商品プラグイン

おすすめ商品プラグイン

システム連携(Facebook連携、google連携など)

  • おそらく Product->Status しか見ていない?

Doctrine Filters を使う案

管理画面、フロント画面で制御を変えたいため、単純な追加では対応できない。
(管理画面にログインしているとフロント画面で全商品表示されたりなど)

ユースケース

一覧画面では非表示、詳細画面には表示(あるいはその逆)

  • カスタマイズする場合の例:商品に「一覧に出さないフラグ」で対応

URL知っている人のみ商品詳細にアクセスできる

  • カスタマイズする場合の例:商品に「URL知っていないと表示しないフラグ」で対応

管理者からどう見えたら良いか

基本管理者からは見えて良い。
ただし、管理者権限で見えていることを意識させるようにしたい。
以下のメンテナンスモードのように「管理者でログインしています」のような文言を出せば対応可能?
#4966 (comment)

Issueを作成しました。 #5006

@k-yamamura
Copy link
Contributor

dtb_productに項目を持たせて以下のように対応する方法で良いと思います。

  • 公開日時From、To
    →公開日時の条件にあっていなければ非表示にする、或いは公開前であれば「販売前です」、公開終了すれば「終了しました」と表示させる等
  • 検索条件表示・非表示フラグ(商品一覧での利用を想定)
    →商品詳細画面は表示させる。但しGoogle等の検索エンジン対策は必要。

管理者は条件関係なく表示させるようし、プラグイン側もこれに準拠してもらうようにするか、
あるいは関数を別途用意しそれを呼び出してもらうようにするかで対応してもらう。

上記とは別に、「会員登録していなければ価格が表示されない」「会員登録していなければカートに追加できない(カートボタンを表示しない)」などもあれば便利。

@Rights1995
Copy link

公開日時の件、Ver2の頃からほぼカスタマイズで追加実装しています。
標準実装されていないのが不思議なくらいでしたが、プラグイン側からの制御も含めて、表示/非表示の挙動について

公開開始日から終了日までの日付指定があれば、その期間に限定して公開
のほかに
公開開始日に日付の指定があって、終了日に指定がない場合、開始日以降は通常表示
公開最終日に日付の指定があって、開始日に指定がない場合、最終日以降は非表示
も考慮されていると良いと思います。(開始日、終了日の双方を必須としない)

また、期間設定がある場合は、その期間に適用される販売価格が設定できるとよいのではないでしょうか?

@chihiro-adachi chihiro-adachi modified the milestones: 4.1, 4.1.x Sep 3, 2021
@chihiro-adachi chihiro-adachi changed the base branch from 4.1-feature to 4.1 September 6, 2021 05:18
@xuelian311 xuelian311 modified the milestones: 4.1.x, 4.2.3 Jul 7, 2023
@xuelian311 xuelian311 modified the milestones: 4.2.3, 4.2.x Aug 25, 2023
@ji-eunsoo ji-eunsoo closed this Apr 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants