Magento:将子类别添加到左侧导航菜单

时间:2015-08-13 15:19:19

标签: php magento nav

我正在使用magento。这是加载我左侧导航栏的代码。它将主要类别加载到ol中。我还想让它在每个li中加载子类别。我在这里放 LOAD CHILD CATEGORIES 我想知道PHP代码来获取和显示上述父类别的所有子类别。我找到了几个修复但不知道pHp导致了一系列错误。

/**
 * Category left navigation
 *
 * @see Mage_Catalog_Block_Navigation
 */


if (!Mage::registry('current_category')) {
    //no current category selected so default to showing the Products category
    $cur_category=Mage::getModel('catalog/category')->load(51);
    $layer = Mage::getSingleton('catalog/layer');
    $layer->setCurrentCategory($cur_category);
}else{
    //current category selected so display the child categories for it
    $layer = Mage::getSingleton('catalog/layer');
    $_category = $layer->getCurrentCategory();
    $currentCategoryId= $_category->getId();

    if($currentCategoryId == 306){
        //best sellers is selected so show the Product category
        $cur_category=Mage::getModel('catalog/category')->load(51);
        $layer = Mage::getSingleton('catalog/layer');
        $layer->setCurrentCategory($cur_category);
    }
}

$_categories=$this->getCurrentChildCategories();
$_count = is_array($_categories)?count($_categories):$_categories->count();
if($_count):
?>
<div class="box layered-nav">
    <div class="head">
        <h3><?php echo $this->__('Browse By') ?> PRODUCT CATEGORY</h3>
    </div>
    <div class="border-creator">
        <div class="narrow-by">
            <dl id="narrow-by-list">
                <dd>
                    <ol>
                    <?php foreach ($_categories as $_category): ?>
                        <?php if($_category->getIsActive()): ?>
                        <li>                        
                            <a href="<?php echo $this->getCategoryUrl($_category) ?>"<?php if ($this->isCategoryActive($_category)): ?> class="active"<?php endif ?>><?php echo $this->htmlEscape($_category->getName()) ?></a>
                        **LOAD CHILD CATEGORIES IN HERE**
                        </li>
                        <?php endif; ?>
                    <?php endforeach ?>
                    </ol>
                </dd>
            </dl><script type="text/javascript">decorateDataList('narrow-by-list')</script>
        </div>
    </div>
</div>
<?php
endif; 
?>
<!-- [ends] .browse-by // -->

到目前为止,我提出的最好,我知道它不多

<ul class="subnav">
<li><a></a>
</ul>

我非常感谢任何帮助

2 个答案:

答案 0 :(得分:0)

检查以下代码

 <?php $_helper = Mage::helper('catalog/category'); 
 $_categories = $_helper->getStoreCategories(); 
 $currentCategory = Mage::registry('current_category') ;
 if (count($_categories) > 0): ?>
    <ul>
        <?php foreach($_categories as $_category): ?>
            <li>
                <a href="<?php echo $_helper->getCategoryUrl($_category) ?>">
                    <?php echo $_category->getName() ?>
                </a>
                <?php $_category = Mage::getModel('catalog/category')->load($_category->getId()) ?>
                <?php $_subcategories = $_category->getChildrenCategories() ?>
                <?php if (count($_subcategories) > 0): ?>
                    <ul>
                        <?php foreach($_subcategories as $_subcategory): ?>
                            <li>
                                <a href="<?php echo $_helper->getCategoryUrl($_subcategory) ?>">
                                    <?php echo $_subcategory->getName() ?>
                                </a>
                            </li>
                        <?php endforeach; ?>
                    </ul>
                <?php endif; ?>
            </li>
        <?php endforeach; ?>
    </ul>
<?php endif; ?>

现在$_subcategories = $_category->getChildrenCategories()获取所有子类别。

答案 1 :(得分:0)

谢谢Chanz我使用了你的代码片段,最终提出了以下内容。花了一段时间cus我有点慢,但你给了我我需要的东西。很多东西。

/**
 * Category left navigation
 *
 * @see Mage_Catalog_Block_Navigation
 */


if (!Mage::registry('current_category')) {
    //no current category selected so default to showing the Products category
    $cur_category=Mage::getModel('catalog/category')->load(51);
    $layer = Mage::getSingleton('catalog/layer');
    $layer->setCurrentCategory($cur_category);
}else{
    //current category selected so display the child categories for it
    $layer = Mage::getSingleton('catalog/layer');
    $_category = $layer->getCurrentCategory();
    $currentCategoryId= $_category->getId();

    if($currentCategoryId == 306){
        //best sellers is selected so show the Product category
        $cur_category=Mage::getModel('catalog/category')->load(51);
        $layer = Mage::getSingleton('catalog/layer');
        $layer->setCurrentCategory($cur_category);
    }
}

$_categories=$this->getCurrentChildCategories();
$_count = is_array($_categories)?count($_categories):$_categories->count();
if($_count):
?>
<div class="box layered-nav">
    <div class="head">
        <h3><?php echo $this->__('') ?> PRODUCT CATEGORIES</h3>
    </div>
    <div class="border-creator">
        <div class="narrow-by">
            <dl id="narrow-by-list">
                <dd>
                    <ol>
                    <?php foreach ($_categories as $_category): ?>
                        <?php if($_category->getIsActive()): ?>
                        <li>                        
                            <a href="<?php echo $this->getCategoryUrl($_category) ?>"<?php if ($this->isCategoryActive($_category)): ?> class="active"<?php endif ?>><?php echo $this->htmlEscape($_category->getName()) ?></a>
                            <?php $_subcategories = $_category->getChildrenCategories() ?>
                            <?php if (count($_subcategories) > 0): ?>
                                <ul>
                                    <?php foreach($_subcategories as $_subcategory): ?>
                                    <?php if($_category->getIsActive()): ?>
                                    <li>
                                        <a href="<?php echo $this->getCategoryUrl($_subcategory) ?>"<?php if ($this->isCategoryActive($_subcategory)): ?> class="active"<?php endif ?>><?php echo $this->htmlEscape($_subcategory->getName()) ?></a>
                                        </a>
                                    </li>
                                    <?php endif; ?>
                                    <?php endforeach; ?>
                                </ul>
                            <?php endif; ?>
                        </li>
                        <?php endif; ?>
                    <?php endforeach; ?>
                    </ol>
                </dd>
            </dl><script type="text/javascript">decorateDataList('narrow-by-list')</script>
        </div>
    </div>
</div>
<?php
endif; 
?>
<!-- [ends] .browse-by // -->