Як отримати верхню батьківську категорію з об'єкта поточної категорії?


14

Як я можу отримати батьківську категорію верхнього рівня (відразу після категорії за замовчуванням) від об'єкта поточної категорії? Я хочу, щоб ім’я категорії та URL-адреси цієї батьківської категорії відображалися в підкатегоріях.

  • Категорія за замовчуванням
    • Кіт А
      • Кіт Б
        • Кіт С

Як я можу отримати Cat A«s Ім'я та URL в Cat Bі Cat Cоб'єкти?

Відповіді:


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

@Marius, коли я отримую шлях до категорії, вказує 1/2 / <Відповідний ідентифікатор категорії> Мій ідентифікатор категорії за замовчуванням - 2. Тоді що це за 1?
Метелик

1
@invissible ви праві.
Маріус

15

Спробуйте це

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

Просто скопіюйте та вставте цей код :)


Привіт. Дякую за вашу відповідь, але ви запізнюєтесь на 5 місяців :)
MagExt

9
Ласкаво просимо до стеку Magento. Ви вірно відповіли на старе запитання, якщо у вас є хороша відповідь, яка ще не була висвітлена. Відповіді - на благо громади, а не лише на користь ОП. Так тримати! :)
McNab

Ця відповідь буде неправильною, якщо ви знаходитесь на рівні 3 і глибше, оскільки він повертається першим Батьком, тоді як питання стосувалося першої.
gnysek

Незважаючи на те, що це не повне рішення, можна циклічно до досягнення бажаного рівня. Підштовхнув мене в правильному напрямку.
Доміно

4

Ви можете використовувати getParentCategories () для поточної категорії, а потім викликати array_pop, щоб отримати останній елемент. Зробіть це двічі, щоб отримати другий останній елемент.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.