¿Cómo obtener la categoría principal superior del objeto de categoría actual?

14

¿Cómo puedo obtener la categoría principal de nivel superior (justo después de la Categoría predeterminada) del objeto de categoría actual? Quiero que el Nombre de categoría y la URL de categoría de esa categoría principal se muestren en las subcategorías.

  • Categoría predeterminada
    • Gato a
      • Gato B
        • Gato c

¿Cómo puedo ingresar Cat Ael nombre y la URL Cat By los Cat Cobjetos?

MagExt
fuente

Respuestas:

22

$category->getPath()devolverá los identificadores de todas las categorías desde la raíz del árbol hasta la actual separada por una barra inclinada ( /). He aquí un ejemplo: 1/2/56/124/543. El primero es la "raíz de las raíces". El segundo es la raíz del catálogo (categoría predeterminada). El resto de ellos son categorías simples. Entonces puedes hacer algo como esto.

$path = $category->getPath();
$ids = explode('/', $path);
if (isset($ids[2])){
    $topParent = Mage::getModel('catalog/category')->setStoreId(Mage::app()->getStore()->getId())->load($ids[2]);
}
else{
    $topParent = null;//it means you are in one catalog root.
}

Ahora puede obtener el nombre y la URL de esta manera:

if ($topParent){
    $name = $topParent->getName();
    $url = $topParent->getUrl();
}
Marius
fuente
Gracias marius! Había un error tipográfico en getId()lo corregí. Funciona perfectamente
MagExt
frio. Perdón por el error tipográfico. y gracias por la corrección
Marius
Hola, ¿alguien puede referirme al documento oficial de magento para el árbol de categorías?
MengT
@Marius cuando obtengo la ruta de la categoría, toda la categoría dice 1/2 / <ID de categoría respectiva> Mi ID de categoría predeterminada es 2. Entonces, ¿qué es este 1?
Mariposa
1
@invisible tienes razón.
Marius
15

Prueba esto

$level = $this->getCurrentCategory()->getParentCategory()->getLevel();
if($level > 1){                 
    echo $this->getCurrentCategory()->getParentCategory()->getName();
    }
    else{
    echo $this->escapeHtml($_category->getName());
    }

Simplemente copie y pegue este código :)

Kanagan
fuente
Hola. Gracias por tu respuesta, pero llegas 5 meses tarde :)
MagExt
99
Bienvenido a la pila de Magento. Tiene toda la razón al responder una vieja pregunta si tiene una buena respuesta que aún no se ha cubierto. Las respuestas son para el bien de la comunidad y no solo para el beneficio del OP. ¡Seguid así! :)
McNab
Esta respuesta será incorrecta si estás en el nivel 3 y más profundo, ya que devuelve el primer padre, mientras que la pregunta era sobre la primera.
gnysek
Si bien esta no es una solución completa, se podría repetir hasta alcanzar el nivel deseado. Me empujó en la dirección correcta.
Domino
4

Puede usar getParentCategories () en la categoría actual y luego llamar a array_pop para obtener el último elemento. Hazlo dos veces para obtener el segundo último elemento.

Tobias
fuente