项目需求,要在每一个分类里把分类树在页面显示出来

百度、google后都没有很好的结果,都说如何获取子分类!

这对于我来说,都是没用!

我想要的是知道了指定分类,获取指定分类的上级直及至顶级的分类树信息

查询无结果,那就只有看magento的源代码了,有那么一个Mage::getResourceModel('catalog/category_tree')模块是处理分类树信息,里面的方法挺多,但也没有针对获取分类树信息,

取子类倒是有很多,然后还有一个很有意思的方法loadBreadcrumbsArray

这个方法就是给一个path参数后,会将相应的分类返回来,它就能达到我的要求,不用我再循环load分类获取分类信息了

那么怎么处理呢?

magento分类Mage::getModel('catalog/category')有一个很重要的分类树Path信息

getPath()返回的是当前分类的分类树信息结果是/1/2/126/320

注:取分类的父分类$category->getParentId()即可

那么就可以通过loadBreadcrumbsArray(category->getPath())拿到整个分类树

代码如下:

$categoty   = Mage::getModel('catalog/category')->load($id);
//id=当前分类id,分类页面$this->getId()好像能拿,在分类页面可以不用此句,直接$this->getPath()就能获取path信息
$tree = Mage::getResourceModel('catalog/category_tree');//加载分类tree模块
$category_tree = $tree->loadBreadcrumbsArray($categoty->getPath());//获取相应分类信息
var_dump($category_tree)//就是所有分类的arr

loadBreadcrumbsArray方法很好用能满足我的需求,但却有个比较大的问题,magento1.9版本下loadBreadcrumbsArray都不兼容Use Flat Catalog Category,在用Use Flat Catalog Category优化magento时,无解,要么改magento核心,要么就只能用其它方面获取分类树,

一般情况下,建议别改核心代码,就算改核心代码也用重写来改核心的代码,不建议直接改Mage/code下面的代码

我本人最后也只能用循环load分类处理了

$path_id = explode('/',$categoty->getPath());//将当前分类的分类树转为数组
$path_arr = array_slice($path_id,2);
//去除前两个不必要的类,由于前两个urlpath为无效url路径:root-catalog、/default-category,
$category_tree = array();
 foreach ($path_arr as $key => $value) {
   $cata = Mage::getModel('catalog/category')->load($value);
   $category_tree[$key]['entity_id'] = $value;
   $category_tree[$key]['name'] = $cata->getName();
   $category_tree[$key]['level'] = $cata->getLevel();
   $category_tree[$key]['url'] = $cata->getUrlPath();
 }
var_dump($category_tree)//就是所有分类的arr