Jak uzyskać najwyższą kategorię nadrzędną z bieżącego obiektu kategorii?

14

Jak mogę uzyskać kategorię nadrzędną najwyższego poziomu (zaraz po kategorii domyślnej) z bieżącego obiektu kategorii? Chcę, aby nazwa kategorii i adres URL tej kategorii nadrzędnej były wyświetlane w podkategoriach.

  • Kategoria domyślna
    • Cat A.
      • Cat B.
        • Cat C.

Jak mogę uzyskać Cat Anazwę i adres URL Cat Boraz Cat Cobiekty?

MagExt
źródło

Odpowiedzi:

22

$category->getPath()zwróci identyfikatory wszystkich kategorii z katalogu głównego drzewa do bieżącej oddzielonej ukośnikiem ( /). Oto przykład: 1/2/56/124/543. Pierwszy to „korzeń korzeni”. Drugi to katalog główny (kategoria domyślna). Reszta to proste kategorie. Możesz więc zrobić coś takiego.

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

Teraz możesz uzyskać nazwę i adres URL w następujący sposób:

if ($topParent){
    $name = $topParent->getName();
    $url = $topParent->getUrl();
}
Marius
źródło
Dzięki Marius! Naprawiłem literówkę getId(). Działa idealnie.
MagExt
chłodny. przepraszam za literówkę. i dzięki za korektę.
Marius
Cześć, czy ktoś może skierować mnie do oficjalnego dokumentu Magento dla drzewa kategorii?
MengT
@Marius, kiedy dostaję ścieżkę kategorii, cała kategoria mówi 1/2 / <Odpowiedni identyfikator kategorii> Mój domyślny identyfikator kategorii to 2. Więc co to jest 1?
Butterfly
1
@ niedopuszczalne masz rację.
Marius
15

Spróbuj tego

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

Po prostu skopiuj i wklej ten kod :)

Kanagan
źródło
Cześć. Dzięki za odpowiedź, ale spóźniłeś się o 5 miesięcy :)
MagExt
9
Witamy w stosie Magento. Masz dobrą odpowiedź na stare pytanie, jeśli masz dobrą odpowiedź, która nie została jeszcze omówiona. Odpowiedzi są dla dobra społeczności, a nie tylko dla korzyści PO. Tak trzymaj! :)
McNab,
Ta odpowiedź będzie błędna, jeśli jesteś na poziomie 3 i głębszym, ponieważ zwraca pierwszego rodzica, podczas gdy pytanie dotyczyło pierwszego.
gnysek
Chociaż nie jest to kompletne rozwiązanie, można zapętlić, aż do osiągnięcia pożądanego poziomu. Popchnął mnie we właściwym kierunku.
Domino,
4

Możesz użyć getParentCategories () w bieżącej kategorii, a następnie wywołać array_pop, aby uzyskać ostatni element. Zrób to dwa razy, aby uzyskać drugi ostatni element.

Tobiasz
źródło