Я смог создать экземпляр объекта категории, чтобы получить его имя, но когда я использую метод 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
?
замещать
$children = Mage::getModel('catalog/category')->getCategories(3);
с
$children = Mage::getModel('catalog/category')->load(3)->getChildrenCategories();
Проблема заключается в том, что 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
который вы, вероятно, ожидали. Остальное должно работать сейчас.
Вы можете загружать каждую категорию в цикл 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; ?>
Это может работать нормально для меньшего количества категорий. Однако, если у вас есть большое количество категорий, это может занять больше времени.