左侧边栏的Magento自定义导航

时间:2012-07-23 18:00:41

标签: magento

您好我想创建一个Magento导航,该导航在类别页面上可见。这有点令人困惑。

1.我有一个父类别Designer3。
2.它有三个子类别CAT1,CAT2和CAT3。
3.现在,CAT1有三个子类:subcat1,sucat2和subcat3。

现在,当我转到CAT1页面时,我希望CAT1 CAT2和CAT3在导航菜单中都可以看到它们的子序列。

取决于所选的当前类别(CAT1,CAT2)或CAT3):

- >如果当前类别为CAT1,则首先显示CAT1及其子类。
- >如果当前的cat是CAT2,那么导航将是具有子类的CAT1,CAT1及其子类,CAT3及其子类。

此外,如果我们在CAT1中选择子类别,Nav的位置应该是CAT1 - 带子系统,带子系统的CAT2和带子系统的CAT3以及现在当前类别的CAT1子系统应该突出显示。

希望这是有道理的。

我尝试过很多东西......但是在编码时我非常挑战......所以

这就是我累了..这给了我当前的类别和它的子猫但是当点击一只子猫时它都会折腾......任何帮助和建议都会被认可......我有点儿当谈到magento时会受到挑战......

    <p><a href="<?php $currentCategory = Mage::registry('current_category');
    //Display current category url
    echo $this->getCurrentCategory()->getUrl();?>" class="ctActiveTitle">
    <?php
    $currentCategory = Mage::registry('current_category');
    //Display current category
    echo $this->getCurrentCategory()->getName();?></a> 
    <!--SHOWING SUB CATEGORIES OF CURRENT CATEGORY-->
    <?php
    $obj = new Mage_Catalog_Block_Navigation();// create obj
    $cat = Mage::getModel('catalog/category')->load($obj->getCurrentCategory()-  >getId()); //get current cat
    $subcats = $cat->getChildren(); // find them kids
    // loop on it
    foreach(explode(',',$subcats) as $subCatid){ // split up the mage data for use
    $_category = Mage::getModel('catalog/category')->load($subCatid);  
    $caturl  = $_category->getURL(); 
    $catname = $_category->getName();   
    // echo a link
    echo '<a href="'.$caturl.'" class="ctBrownLink"> '.$catname.'</a>';

    }?> </p> <p>Tnaks Moody</p>

1 个答案:

答案 0 :(得分:1)

您真的不需要为此编写自定义代码。块Mage_Catalog_Block_Navigation已包含所有这些逻辑,并将解决您的大部分问题。至少你所描述的问题被选为子子类别。有关详细信息,请参阅renderCategoriesMenuHtml()

/**
 * Render categories menu in HTML
 *
 * @param int Level number for list item class to start from
 * @param string Extra class of outermost list items
 * @param string If specified wraps children list in div with this class
 * @return string
 */
public function renderCategoriesMenuHtml($level = 0, $outermostItemClass = '', $childrenWrapClass = '')
{
    $activeCategories = array();
    foreach ($this->getStoreCategories() as $child) {
        if ($child->getIsActive()) {
            $activeCategories[] = $child;
        }
    }
    $activeCategoriesCount = count($activeCategories);
    $hasActiveCategoriesCount = ($activeCategoriesCount > 0);

    if (!$hasActiveCategoriesCount) {
        return '';
    }

    $html = '';
    $j = 0;
    foreach ($activeCategories as $category) {
        $html .= $this->_renderCategoryMenuItemHtml(
            $category,
            $level,
            ($j == $activeCategoriesCount - 1),
            ($j == 0),
            true,
            $outermostItemClass,
            $childrenWrapClass,
            true
        );
        $j++;
    }

    return $html;
}

此外,此方法还会自动处理在非平面和平面类别之间交换时遇到的差异,以及考虑是否应显示类别的事项。

关于导航顺序的一点点。从可用性的角度来看,您可能希望在选择类别后保持订单不变。人们可能期望在特定的地方导航或部分导航。杂耍它们并不是最佳的,你会让人们搜索东西,因为预期的位置会有所不同。