2011-05-04 21 views
9

que he podido crear una instancia de un objeto de la categoría para recuperar su nombre, pero cuando se utiliza el método getUrl no devuelve un URL para la página de categoría perfil, o nada en absolutoMagento getUrl no funciona con el objeto catálogo/categoría?

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

El código resultados anteriores en la salida HTML de

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

¿alguien sabe cómo puedo obtener la dirección URL de una página de categoría de un objeto catalog/category?

Respuesta

16

Reemplazar

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

con

$children = Mage::getModel('catalog/category')->load(3)->getChildrenCategories(); 
+0

¡Este lo hizo! Muchas gracias Gordon! – Kayla

3

Puede cargar cada categoría dentro del bucle foreach y luego obtener la categoría 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; 
?> 

Esto podría funcionar bien para un menor número de categorías. Sin embargo, esto podría llevar más tiempo si tiene una gran cantidad de categorías.

+0

Gracias, este código funciona tan bien! – Kayla

6

El problema es getCategories() normalmente devuelve Varien_Data_Tree_Node_Collection en lugar de una colección de categorías. En su lugar, usted puede hacer esto:

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

El cuarto parámetro es $asCollection, pasando una true significa que se le devuelve un Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Collection que probablemente estaban esperando. El resto debería funcionar ahora.

+0

¡Gracias por tu ayuda! Sin embargo, estaba buscando solo mostrar las categorías de primer nivel para niños, de las cuales se ocuparon las dos respuestas a continuación. De nuevo, ¡muchas gracias por su ayuda! – Kayla

+0

Por el bien de los lectores futuros, puede controlar la profundidad de los niveles con el segundo parámetro; en lugar de '0' poner' 1' para el primer nivel, '2' para el primero y segundo, etc. Tienes razón en que la respuesta de Gordon hace lo mismo y es más clara también. – clockworkgeek

+0

Hola Clockworkgeek, ¿Puede decirme cómo agregar una instrucción if para decir: si las categorías tienen hijos, vincule a categoría infantil, si no, enlace enlace de categoría normal. (Para el sitio móvil) – Geoff

Cuestiones relacionadas