0

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

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

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

根据当前选择的类别(CAT1、CAT2 或 CAT3):

--> 如果当前类别为 CAT1,则首先显示 CAT1 及其子类别。
--> 如果当前的猫是 CAT2,导航将是::

CAT2 及其子猫,CAT1 及其子猫,CAT3 及其子猫。

此外,如果我们在 CAT1 中选择子类别,Nav 的位置应该是 CAT1 - with subcats、CAT2 with subcats 和 CAT3 with subcats,并且现在应该突出显示当前类别的 CAT1 subcat。

希望这是有道理的。

我尝试了很多东西......但在编码方面我非常有挑战......所以

这就是我厌倦的......这给了我当前的类别和它的子猫,但是当一个子猫被点击时,一切都会被折腾......任何帮助和建议都会被认可......当它出现时我有点挑战来到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>
4

1 回答 1

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;
}

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

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

于 2012-07-23T18:36:19.347 回答