2012-07-23 268 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