製品コレクションをカテゴリ別にフィルタリングするコードを作成しました。次のコードを使用して、独自の左側のブロックを作成します。
フィルタリングに最適に機能するようにしていますが、表示をレンダリングするのに苦労しています。
レベル 2 のカテゴリは正常に機能し、表示のみ
- 最上位カテゴリ 1
- 最上位カテゴリ 2
選択すると、サブカテゴリとそのサブカテゴリが表示されます。
- 1 のサブカテゴリ
- ^^のサブサブカテゴリ
- ^^のサブサブカテゴリ
- ^^のサブサブカテゴリ
- のサブサブサブカテゴリ^^^
- 1 のサブカテゴリ
- ^^のサブサブカテゴリ
- ^^のサブサブカテゴリ
- ^^のサブサブカテゴリ
- のサブサブサブカテゴリ^^^
最初のレベルのように分解する必要があります。最良の方法は何ですか?
<?php
$root_category_id = Mage::app()->getStore()->getRootCategoryId();
$filterCategoryId = Mage::app()->getRequest()->getParam('cat');
$products = Mage::getSingleton('catalogsearch/advanced')->getProductCollection();
$catIds = array();
if (isset($products)) foreach ($products as $product) {
if ($product->isSaleable()) {
$ids = $product->getCategoryIds();
foreach ($ids as $id) $catIds[$id] = 1;
}
}
if (!isset($catIds)) return false;
$categories = array();
// Filters rest of categories
if ($filterCategoryId) {
$filterCategory = Mage::getModel('catalog/category')->load($filterCategoryId);
$filterChildren = $filterCategory->getAllChildren(true);
foreach ($catIds as $id => $x) {
$category = Mage::getModel('catalog/category')->load($id);
if (in_array($root_category_id, $category->getParentIds()) && in_array($id, $filterChildren) && $id != $filterCategoryId) {
$categories[$id] = $category->getName();
} else {
unset($catIds[$id]);
}
}
} else {
// Filters the first level categoires
foreach ($catIds as $id => $x) {
$category = Mage::getModel('catalog/category')->load($id);
if (in_array($root_category_id, $category->getParentIds()) && $category->getLevel() == 2) {
$categories[$id] = $category->getName();
} else {
unset($catIds[$id]);
}
}
}
if(isset($categories) && sizeof($categories) > 0):
$url = Mage::app()->getRequest()->getRequesturi();
$url = Mage::helper("core/url")->removeRequestParam($url, 'cat');
?>
<div class="page-subtitle" style="margin:6px auto 14px 6px;"><h2>Shop By Category</h2></div>
<ul class="brandsnav">
<?php foreach($categories as $id=>$name): ?>
<li class="cf">
<span class="subnav_trigger"></span>
<a href="<?php
echo Mage::helper("core/url")->addRequestParam($url, array("cat"=>$id)); ?>"><?php echo $name;?></a>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>