2012-04-20 8 views
1

我々はこのようなカテゴリ構造を持っていない:
ルート
- カテゴリー1
----カテゴリー1 - 1
---- ---カテゴリー1 - 1 - 1
-------カテゴリ1 - 1 - 2
----カテゴリー1 - 2
- カテゴリ2
----カテゴリー1 - 2
----カテゴリ2 - 2Magentoの:すべてのサブカテゴリのショーの製品カテゴリをクリックすると、何のis_anchor

通常、ユーザーがルートカテゴリをクリックすると、空になります。カテゴリ1と2も空です(誤って、1〜2つの製品が存在する可能性があります)。

カテゴリをクリックすると、すべてサブカテゴリ(およびサブカテゴリのサブカテゴリ)の商品が表示されます(+カテゴリそのものにある商品)。

我々ことはできません使用is_anchor、この動作は3 storeviewsの一つとis_anchorがグローバルあるだけのためであるとして。

私の考えはMage_Catalog_Block_Product_Listを書き直すことです。カテゴリをリクエストするときにサブカテゴリの製品を返しますが、すべてのカテゴリコレクションリクエストにフィルタを追加するなどの簡単な方法はありませんか?

類似の質問に対する回答が不完全であるか、is_anchorを使用しています。

+0

'Mage_Catalog_Model_Category'を書き直し、' getLayoutUpdateHandle() 'メソッドをオーバーライドしてください - 現在のストア/ウェブサイトのチェックをそこに追加してください。試してみませんでしたが、 'Mage_Catalog_CategoryController :: viewAction()'を見るとうまくいくかもしれません。 – Zyava

+0

私はあなたの提案を試みましたが、これはもはや出力されないカテゴリーに帰着します。私は 'getProductCollection()'を書き直し続けようとします。 – SebiF

答えて

1

私は今問題を自分で解決しました。

私は次のようにMage_Catalog_Model_Category::getProductCollection()

のステップがあるに書き換えモジュール作成:

  1. 子カテゴリが存在しない場合は、子カテゴリがある場合、標準parent::getProductCollection()
  2. を返し、すべての子を取得しますカテゴリのIDを取得し、配列として保存します。
  3. 現在のカテゴリのIDを配列に追加します。
  4. これらすべてのカテゴリのコレクションを取得し、is_activeでフィルタリングします。
  5. カテゴリコレクションを繰り返し、すべてのカテゴリを読み込みます。
  6. すべてのカテゴリの製品コレクションを取得し、それを繰り返してすべての製品IDを配列に保存します。次のカテゴリがロードされたときに配列に追加します。
  7. 製品コレクションを作成し、フィルターを追加して->addAttributeToFilter('entity_id', array('in' => array_unique($result)));
  8. コレクションを返します。これは、すべてのサブカテゴリのすべての製品と現在のカテゴリの製品を必要に応じて保持します(重複しません)。
関連する問題