Wie erhalte ich die oberste übergeordnete Kategorie vom aktuellen Kategorieobjekt?

14

Wie kann ich die übergeordnete Kategorie der obersten Ebene (direkt nach der Standardkategorie) aus dem aktuellen Kategorieobjekt abrufen? Ich möchte, dass der Kategoriename und die Kategorie-URL dieser übergeordneten Kategorie in den Unterkategorien angezeigt werden.

  • Standardkategorie
    • Katze A
      • Katze B
        • Katze C

Wie kann ich den Cat ANamen und die URL von Cat Bund von Cat CObjekten erhalten?

MagExt
quelle

Antworten:

22

$category->getPath()Gibt die IDs aller Kategorien vom Stamm des Baums zum aktuellen zurück, die durch einen Schrägstrich ( /) getrennt sind. Hier ein Beispiel: 1/2/56/124/543. Der erste ist die Wurzel der Wurzeln. Die zweite ist die Katalogwurzel (Standardkategorie). Der Rest von ihnen sind einfache Kategorien. Sie können also so etwas tun.

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

Jetzt können Sie den Namen und die URL wie folgt abrufen:

if ($topParent){
    $name = $topParent->getName();
    $url = $topParent->getUrl();
}
Marius
quelle
Vielen Dank, Marius! getId()Ich habe einen Tippfehler korrigiert. Es funktioniert perfekt.
MagExt
cool. Entschuldigung für den Tippfehler. und danke für die korrektur.
Marius
Hallo, kann mich jemand auf das offizielle Magento-Dokument für den Kategoriebaum verweisen?
MengT
@Marius, wenn ich den Pfad der Kategorie erhalte, sagt die gesamte Kategorie 1/2 / <jeweilige Kategorie-ID>. Meine Standard-Kategorie-ID ist 2. Was ist dann diese 1?
Schmetterling
1
@invissible du hast recht.
Marius
15

Versuche dies

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

Kopiere einfach diesen Code und füge ihn ein :)

Kanagan
quelle
Hallo. Vielen Dank für Ihre Antwort, aber Sie sind 5 Monate zu spät :)
MagExt
9
Willkommen im Magento Stack. Sie haben völlig Recht, eine alte Frage zu beantworten, wenn Sie eine gute Antwort haben, die noch nicht behandelt wurde. Die Antworten sind zum Wohle der Gemeinschaft und nicht nur zum Wohle des OP. Mach weiter! :)
McNab
Diese Antwort ist falsch, wenn Sie sich auf Stufe 3 und tiefer befinden, da sie den ersten Elternteil zurückgibt, während es sich bei der Frage um die erste handelt.
gnysek
Dies ist zwar keine vollständige Lösung, es kann jedoch eine Schleife ausgeführt werden, bis das gewünschte Niveau erreicht ist. Schob mich in die richtige Richtung.
Domino
4

Sie können getParentCategories () für die aktuelle Kategorie verwenden und dann array_pop aufrufen, um das letzte Element abzurufen. Mach es zweimal, um das vorletzte Element zu erhalten.

Tobias
quelle