0

製品コレクションをカテゴリ別にフィルタリングするコードを作成しました。次のコードを使用して、独自の左側のブロックを作成します。

フィルタリングに最適に機能するようにしていますが、表示をレンダリングするのに苦労しています。

レベル 2 のカテゴリは正常に機能し、表示のみ

  1. 最上位カテゴリ 1
  2. 最上位カテゴリ 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; ?>
4

1 に答える 1

0

foreach ステートメントに条件を追加するだけでした。動作しました。

于 2013-09-24T22:06:42.640 に答える