2013-08-16 2 views
0

пытается отобразить все вторые категории уровня и моего кодКак получить URL из категории в Magento

<?php $storeId = Mage::app()->getStore()->getId(); 

//Get category model 
$_category = Mage::getModel('catalog/category')->setStoreId($storeId); 

$_categoryCollection = $_category->getCollection(); 
$_categoryCollectionIds = $_categoryCollection->getAllIds(); 

//Remove root category from array 
unset($_categoryCollectionIds[0], $_categoryCollectionIds[1]); 

?> 

<div id="accordian_hover"> 
<?php 

$o = null; 
$o .= '<ul>'; 

foreach ($_categoryCollectionIds as $catId) { 

    $_category = $_category->load($catId); 

     if($_category->getLevel() == 2) { 

      $catChildren = $_category->getChildren();   

       if(!empty($catChildren)) { 
        $o .= '<li> <a href="'.$_category->getUrl().'">'.$_category->getName().'</a>'; 
        $o .= '<ul>'; 

        $categoryChildren = explode(",", $catChildren); 

        foreach ($categoryChildren as $categoryChildId) { 

         /* @var $_childCategory Mage_Catalog_Model_Category */ 
         $_childCategory = $_category = Mage::getModel('catalog/category')->setStoreId($storeId)->load($categoryChildId); 

         $o .= '<li><a href="'.$_childCategory->getUrl().'">'.$_childCategory->getName().'</a></li>'; 

         // If you wish to display the total number of products for each category, uncomment this line 
         // $o .= '<span class="totalNumberOfProducts">'.$_childCategory->getProductCollection()->count().'</span>'; 

        } 

        $o .= '</ul></li>'; 
       } 

     } 
    } $o .='</ul>'; 


echo $o; 
?> 
</div> 

Но верхний URL меню неправильно все другие показывают правильно, но основная категория URL является неправильно (2-я категория) Пожалуйста, помогите мне, и я должен отобразить меню третьего уровня, также, когда пользователь наводил на категорию ... Ссылка на соединение http://toolskaart.com/

ответ

0

Надеюсь, что приведенный ниже код решит вашу проблему.

Mage::getModel('catalog/category')->load($_category->getId())->getUrl() 

Это работает для меня.

+3

Это прекрасный пример того, что-не-в-мадженто. Повторная загрузка всего объекта из базы данных на каждой итерации (!) В Magento не будет очень эффективной. –

+0

Можете ли вы привести мне пример. Как переписать его. – Sethu

+0

Используйте коллекцию моделей - это загрузка всей коллекции сразу (с использованием фильтрации по id), а затем просто итерация объектов. Он будет использовать один запрос вместо 'n', делая его значительно быстрее. –