2012-07-23 185 views
0

Magento自定义导航左侧边栏

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

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

现在,当我转到CAT1页面时,我希望CAT1 CAT2和CAT3在导航菜单中全部可见并显示其子对象。

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

- >如果当前类别为CAT1,则首先显示CAT1及其子标题。
- >如果目前的猫是CAT2,那么导航将如此进行::

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

希望这是有道理的。

我尝试了一些东西......但是,当涉及到编码IM非常挑战...所以

这是我累了。这给了我目前的类别及其子猫科动物,但是当一个子猫被点击这一切都为一折腾....任何帮助和建议将被aprrecited ...即时通讯,当涉及到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

你并不真的需要写为此定制代码。块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; 
} 

而且这种方法也自动处理像考虑到类别是否应显示或不非平面和平面类和事物之间的交换时,你会遇到的差异。

关于你的位导航的顺序。从可用性的角度来看,您可能希望在选择某个类别后保持订单不变。人们可能会期望导航或其中的一部分在特定的地方。跟踪他们周围并不是最佳的,因为预期的位置会有所不同,所以你会让人们搜索。

+0

thanxs添..填补了更多..我已经在一个单独的phtml文件中使用此代码,然后在catalog.xml的“左侧”中调用该代码。我没有使用主导航left.phtml,因为我想调整内容区域中显示的某些属性。现在,有了这个背景,你可以请告诉我如何使用这个功能,因为我有点挑战。此外,导航定位部分是需要的... thanxs再次.. – Moody 2012-07-24 07:09:02

+0

那么,您可以扩展此功能,而不是将所有返回的数据存储在$ html中,将$ activeCategories循环内的每个迭代存储到数组中的不同键在$ category-> getId()上键入它们。这样,每个类别都会有一个单独的html片段,使您可以在模板中打印它们时按顺序移动它们。此外,我不知道你想要显示哪种属性,但我想这个功能仍然是,对你的工作的所有尊重,是继续的更好的基础,而不是你展示的片段。 – 2012-07-24 19:43:57

+0

所以最终的东西,如: – 2012-07-24 19:50:36