Comment obtenir la catégorie parent supérieure de l'objet de catégorie actuelle?

14

Comment puis-je obtenir la catégorie parent de niveau supérieur (juste après la catégorie par défaut) à partir de l'objet de catégorie actuel? Je souhaite que le nom de catégorie et l'URL de catégorie de cette catégorie parente s'affichent dans les sous-catégories.

  • Catégorie par défaut
    • Cat A
      • Cat B
        • Cat C

Comment obtenir Cat Ale nom et l'URL de Cat Bet les Cat Cobjets?

MagExt
la source

Réponses:

22

$category->getPath()retournera les identifiants de toutes les catégories de la racine de l'arborescence à celle en cours, séparés par une barre oblique ( /). Voici un exemple: 1/2/56/124/543. Le premier est la «racine des racines». La seconde est la racine du catalogue (catégorie par défaut). Les autres sont des catégories simples. Vous pouvez donc faire quelque chose comme ça.

$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.
}

Vous pouvez maintenant obtenir le nom et l'URL comme ceci:

if ($topParent){
    $name = $topParent->getName();
    $url = $topParent->getUrl();
}
Marius
la source
Merci Marius! Il y avait une faute de frappe dans getId()je l'ai corrigée. Cela fonctionne parfaitement.
MagExt
cool. désolé pour la faute de frappe. et merci pour la correction.
Marius
Salut, quelqu'un peut-il me renvoyer au document officiel de magento pour l'arborescence des catégories?
MengT
@Marius lorsque j'obtiens le chemin de la catégorie, toute la catégorie dit 1/2 / <ID de catégorie respective> Mon identifiant de catégorie par défaut est 2. Alors, quel est ce 1?
Butterfly
1
@invissible vous avez raison.
Marius
15

Essaye ça

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

Copiez et collez simplement ce code :)

Kanagan
la source
Salut. Merci pour votre réponse, mais vous avez 5 mois de retard :)
MagExt
9
Bienvenue dans la pile Magento. Vous avez tout à fait raison de répondre à une vieille question si vous avez une bonne réponse qui n'a pas déjà été traitée. Les réponses sont pour le bien de la communauté et pas seulement pour le bénéfice du PO. Continuez! :)
McNab
Cette réponse sera erronée si vous êtes au niveau 3 et plus profond, car elle renvoie le premier parent, alors que la question concernait le premier.
gnysek
Bien que ce ne soit pas une solution complète, on pourrait boucler jusqu'à ce que le niveau souhaité soit atteint. M'a poussé dans la bonne direction.
Domino
4

Vous pouvez utiliser getParentCategories () sur la catégorie actuelle, puis appeler array_pop pour obtenir le dernier élément. Faites-le deux fois pour obtenir l'avant-dernier élément.

Tobias
la source