Magento getUrl не работает с объектом каталога / категории? - PullRequest
9 голосов
/ 05 мая 2011

Мне удалось создать экземпляр объекта категории для получения его имени, но когда я использую метод getUrl, он не возвращает URL-адрес страницы со списком категорий или что-либо еще

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

Приведенный выше код приводит к выводу в формате HTML

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

Кто-нибудь знает, как я могу получить URL-адрес страницы категории из объекта catalog/category?

Ответы [ 3 ]

16 голосов
/ 05 мая 2011

Заменить

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

на

$children = Mage::getModel('catalog/category')->load(3)->getChildrenCategories();
6 голосов
/ 05 мая 2011

Проблема в том, что getCategories() обычно возвращает Varien_Data_Tree_Node_Collection, а не набор категорий. Вместо этого вы можете сделать это:

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

Четвертый параметр - $asCollection, пропуск true означает, что вы получили Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Collection, что вы, вероятно, ожидали. Остальные должны работать сейчас.

3 голосов
/ 05 мая 2011

Вы можете загрузить каждую категорию внутри цикла foreach, а затем получить 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;
?>

Это может хорошо работать для меньшего количества категорий. Однако это может занять больше времени, если у вас есть большое количество категорий.

...