Как получить верхнюю родительскую категорию из объекта текущей категории?

14

Как я могу получить родительскую категорию верхнего уровня (сразу после категории по умолчанию) из объекта текущей категории? Я хочу, чтобы имя категории и URL-адрес этой родительской категории отображались в подкатегориях.

  • Категория по умолчанию
    • Кот А
      • Кот Б
        • Cat C

Как я могу получить Cat Aимя и URL в Cat Bи Cat Cобъекты?

MagExt
источник

Ответы:

22

$category->getPath()вернет идентификаторы всех категорий от корня дерева до текущего, разделенного слешем ( /). Вот пример: 1/2/56/124/543. Первый - это «корень корней». Второй - корень каталога (категория по умолчанию). Остальные из них простые категории. Таким образом, вы можете сделать что-то вроде этого.

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

Теперь вы можете получить имя и URL-адрес следующим образом:

if ($topParent){
    $name = $topParent->getName();
    $url = $topParent->getUrl();
}
Мариус
источник
Спасибо Мариус! Была опечатка, getId()я исправил это. Работает отлично.
MagExt
круто. извините за опечатку. и спасибо за исправление.
Мариус
Привет, кто-нибудь может отослать меня к официальному пурпурному документу для дерева категорий?
MengT
@Marus, когда я получаю путь к категории, вся категория говорит 1/2 / <Соответствующий идентификатор категории> Мой идентификатор категории по умолчанию равен 2. Тогда что это за 1?
Butterfly
1
@ Невидимый, ты прав.
Мариус
15

Попробуй это

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

Просто скопируйте и вставьте этот код :)

Kanagan
источник
Здравствуй. Спасибо за ваш ответ, но вы опоздали на 5 месяцев :)
MagExt
9
Добро пожаловать в стек Magento. Вы совершенно правы, если ответите на старый вопрос, если у вас есть хороший ответ, который еще не был рассмотрен. Ответы на благо сообщества, а не только на пользу ОП. Так держать! :)
McNab
Этот ответ будет неправильным, если вы находитесь на уровне 3 и глубже, так как он возвращает первого родителя, в то время как вопрос был о верхнем.
gnysek
Хотя это не полное решение, можно зацикливаться, пока не будет достигнут желаемый уровень. Подтолкнул меня в правильном направлении.
Домино
4

Вы можете использовать getParentCategories () для текущей категории, а затем вызвать array_pop, чтобы получить последний элемент. Сделайте это дважды, чтобы получить второй последний элемент.

Тобиас
источник