豊富なカタログ(10,000製品)とかなり深いカテゴリツリーを備えたMagentoサイトがあります。
製品のすべてのカテゴリは、トップレベルの「すべての製品」カテゴリに由来します。
すべての製品には、「ブランド」のドロップダウン属性があります。
私がやろうとしているのは、訪問者がカテゴリツリーの一番上から始めて、ブランドが選択されているかどうかに関係なく、[すべての製品]ツリーを下に移動できるようにすることです。問題は、各レベルで次のレベルのサブカテゴリを表示する必要があることです。ブランドが適用されない場合は、空のカテゴリを表示したくありません。
たとえば、ツリーがこのようになり、1つが「ドライバーページ」にある場合、タイプと長さの両方のカテゴリを表示する必要があります。
- すべての製品
- スクリュードライバー
- フィリップス
- 2 "
- 3 "
- 5インチ
- マゴチ
- 1 "
- 3 "
- 5インチ
- フィリップス
- スクリュードライバー
カテゴリコレクションを作成することで、ブランドフィルタを気にせずにこれを行うことができました。
$_category = $this->getCurrentCategory();
$current_level = $_category->getLevel();
$collection = $_category->getCollection();
$collection->addAttributeToSelect('url_key')
->addAttributeToSelect('name')
->addAttributeToSelect('parent_id')
->addAttributeToFilter('is_active', 1)
->addAttributeToFilter('level',array('in'=>array($current_level+1,$current_level+2)))
->setOrder('position','ASC')
->load();
私の調査によると、カテゴリコレクションを商品属性で直接フィルタリングする ことはできないようです。
これが真実であると仮定すると、これ を達成するための最良の方法は何ですか?私はいくつかのアイデアを考え、事前に試しました。
- ブランドでフィルタリングされた製品コレクションを作成し、それをループして、関連するすべてのカテゴリを取得し、ツリーを構築します(これはひどく非効率的であるように思われます)
- 階層化されたナビゲーションを利用してカテゴリを出力してみてください(これは、1つのレベルのみを表示している場合に機能します。フィルタリングされた「2番目の」レベルを取得するのに問題があります)。
- フィルタリングのアイデアを放棄し、新しい「ブランド別の参照」カテゴリの下にカテゴリツリーを複製します(製品を更新するために2つの複製ツリーを更新する必要がないように、これを避けたいと思います)。
助けてくれてありがとう。問題の説明が必要な場合はお知らせください。