あらすじ
私が取り組んでいるMagentoストアによって、グループ化された製品と関連する単純な製品を使用するように構成されているという問題があります。これらの製品は、管理者で設定された製品の属性/値でフィルタリングできます。
現在の行動
- 単純な製品の可視性は、「個別に非表示」に設定されています。
- 検索された単純な製品は、グループ製品ごとに表示されます。
エンドユーザーが製品の結果を色(たとえば、red)でフィルターすると、グループ化された製品で、赤の色の属性値を持つ単純な関連製品が表示されます。
予想される動作(カスタマイズ後)
- 単純な製品の可視性は、「個別に非表示」に設定されています。
- 検索された単純な製品は、グループ製品ごとに表示されます。
エンドユーザーが製品の結果を色(のみ)でフィルターすると、グループ化された製品が表示される代わりに、その単純な製品が表示されます。
私のロジックは-リクエストパラメーターを通してフィルターを検出することができました。カラーフィルターが設定されている場合、製品の結果を何とか上書きします。
どういう意味かというと、これが簡単な問題の解決に苦労している部分です。この問題を解決するにはどうすればよいですか?
結論/試み
以下は、私が問題を完全に解決しないか、まったく問題を解決しないことを見つけるために私が考え、試した試みのリストです。
を観察してくださいcatalog_controller_category_init_before
:
この_initCategory()
方法を確認したところ、レイアウトをオーバーライドして、グループ化された製品ではなく単純な製品を表示するようにMagentoの構成を変更できる可能性があると考えました。
しかし、それ$this->loadLayout()
は決して呼び出されないように見えるので、getLayout
または自体のviewAction
メソッドをオーバーライドする必要がありCategoryController
ます。
レイアウトの変更を実装するには、CategoryControllerを明示的にオーバーライドします。
上記を元に戻し、機能をオーバーライドする2番目のオプションを追求することにしました。Mage_Catalog_CategoryController
コントローラーの拡張から始めます。
私の最初のトライアルはをオーバーライドすることでしたが、loadLayout
これが呼び出されないことを知った後getLayout
、この時点でをオーバーライドすることを決定しました。
をオーバーライドしMage_Catalog_Block_Product_List
ます。
私は、モデルとコレクションが必要な実際のブロックを拡張することをお勧めしました。ブロック内でgetProductsListHtml
メソッドをオーバーライドすると、HTML全体が既に解析、実行、生成されていることがすぐにわかります。
だから私は簡単にはできませんでした。
- 聞いてください
$this->getRequest()->getParams()
。 - グループ化された製品を反復処理して、フィルターに一致する関連製品を取得します。
catalog_product_collection_load_after
イベントを観察します。
今回は、モデルコレクションを観察し、フィルターを設定したときに結果を変更するようにクエストを変更できると思いました。これ$observer->getEvent()->getCollection()
により、フィルターに基づいてクエリを取得および更新します。
グループ化された製品を削除できるのでこれは機能しませんが、可視性のために単純な製品は表示されません。