如何从当前类别对象获取顶级父类别?


14

如何从当前类别对象获取顶级父类别(紧随“默认类别”之后)?我希望该父类别的类别名称和类别URL显示在子类别中。

  • 默认类别
    • 猫A
      • 猫B
        • C猫

如何Cat ACat BCat C对象中获取的名称和URL ?

Answers:


22

$category->getPath()将从树根到当前的所有类别的ID(以斜杠(/)分隔)返回。这是一个示例: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.
}

现在,您可以像这样获取名称和网址:

if ($topParent){
    $name = $topParent->getName();
    $url = $topParent->getUrl();
}

感谢马吕斯!getId()我纠正了一个错字。运行良好。
MagExt

凉。抱歉打错了。并感谢您的纠正。
马吕斯

嗨,有人可以推荐我参阅类别树的正式magento文档吗?
MengT 2014年

当我获得所有类别的路径时,@ Marius会说1/2 / <各自的类别ID>我的默认类别ID是2。那么这是1?
蝴蝶

1
@看不见你是对的。
马里斯

15

尝试这个

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

只需复制并粘贴此代码即可:)


你好 感谢您的回答,但是您迟到了5个月:)
MagExt

9
欢迎使用Magento Stack。如果您有一个好的答案尚未涵盖,那么您回答一个老问题是非常正确的。答案是为了社区的利益,而不仅仅是为了OP。保持!:)
McNab

如果您在3级以上,则此答案将是错误的,因为它返回的是第一个父级,而问题是关于前一个的。
gnysek

虽然这不是一个完整的解决方案,但可以循环直到达到所需的级别。向正确的方向推我。
Domino

4

您可以在当前类别上使用getParentCategories(),然后调用array_pop以获取最后一个元素。进行两次以获取倒数第二个元素。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.