Magento getUrl not working with catalog/category o

2019-04-22 00:46发布

I've been able to instantiate a category object to retrieve its name, but when I use the getUrl method it isn't returning a URL to the category listing page, or anything at all

<?php
$children = Mage::getModel('catalog/category')->getCategories(3);
foreach ($children as $category):
            echo '<li><a href="' . $category->getUrl() . '">' . $category->getName() . '</a></li>';
        endforeach;
?> 

The code above results in HTML output of

<li><a href="">name of sub-cat</a></li>`

Does anyone know how I can get the URL for a category page from a catalog/category object?

3条回答
虎瘦雄心在
2楼-- · 2019-04-22 01:24

The problem is getCategories() normally returns a Varien_Data_Tree_Node_Collection rather than a collection of categories. Instead, you can do this:

$children = Mage::getModel('catalog/category')->getCategories(3, 0, false, true);

The fourth parameter is $asCollection, passing a true means you are returned a Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Collection which you were probably expecting. The rest should work now.

查看更多
叼着烟拽天下
3楼-- · 2019-04-22 01:32

Replace

$children = Mage::getModel('catalog/category')->getCategories(3);

with

$children = Mage::getModel('catalog/category')->load(3)->getChildrenCategories();
查看更多
走好不送
4楼-- · 2019-04-22 01:48

You may load every category within the foreach loop and then get the category URL.

<?php
$children = Mage::getModel('catalog/category')->getCategories(3);
foreach ($children as $category): 
        $categoryUrl = Mage::getModel('catalog/category')->load($category->getEntityId())->getUrl();
        echo '<li><a href="' . $categoryUrl . '">' . $category->getName() . '</a></li>';
endforeach;
?>

This might work fine for less number of categories. However, this might take more time if you have large number of categories.

查看更多
登录 后发表回答