1


ルート
-- カテゴリ 1
---- カテゴリ 1 - 1
------- カテゴリ 1 - 1 - 1
------- カテゴリ 1 - 1 - 2
---のようなカテゴリ構造があります。- 区分 1 - 2
-- 区分 2
---- 区分 2 - 1
---- 区分 2 - 2

通常、ユーザーがルート カテゴリをクリックすると、空として表示されます。また、カテゴリ 1 と 2 は空です (誤って、1 つまたは 2 つの製品が存在する可能性があります)。

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

is_anchorを使用することはできません。この動作は 3 つの storeview のいずれかのみであり、is_anchor はglobalであるためです。

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

同様の質問への回答は不完全であるか、is_anchor を使用しています。

4

1 に答える 1

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. コレクションを返します。必要に応じて、すべてのサブカテゴリのすべての製品と現在のカテゴリの製品を保持します (重複はありません)。
于 2012-04-24T12:23:29.403 に答える