magento如何獲取指定分類的所有上級父類(級聯至頂級)

項目需求,要在每一個分類裏把分類樹在頁面顯示出來

百度、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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章