Magento获取指定分类下的所有子分类信息
生活随笔
收集整理的這篇文章主要介紹了
Magento获取指定分类下的所有子分类信息
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
二次開發(fā)中經(jīng)常遇到一種情況,就是判斷一個分類是否屬于某一個大的分類,而大的分類包括很多子分類成樹狀結(jié)構(gòu),基本的方法都是先獲取大分類下的所有子分類的信息,然后再挨個比較看是否有ID和待定ID相等。一種用遞歸方法獲取大分類所有的ID;第二種用隊列等非遞歸的方法獲取所有子分類ID,第二種明顯性能要好一些。
本文在magento的模板文件里測試成功一個函數(shù):輸入一個分類的ID,將返回該分類下所有子分類(遞歸獲取)的ID,組成一個數(shù)組返回。所用的方法為用隊列實現(xiàn)的非遞歸方法:
/** * 輸入:某一個分類的ID數(shù)字 * 返回: 該分類下所有子分類的ID組成的數(shù)組 * 可用于: 模板文件中可以直接使用,也可以用于action等文件類內(nèi)部 * 實現(xiàn)思路:使用隊列的方法實現(xiàn)非遞歸,對樹從上往下遍歷 **/ function getAllChildrenOfCategory($cateid){$resArr = array();//結(jié)果數(shù)組$queueArr = array();//隊列數(shù)組array_push($queueArr,$cateid);while($currentcid = array_pop($queueArr)){array_push($resArr,$currentcid); //處理當(dāng)前節(jié)點的孩子節(jié)點$_category = Mage::getModel('catalog/category')->load($currentcid);$subcats = $_category->getChildren();$idarrs = explode(',',$subcats);foreach($idarrs as $subCatid){if(!$subCatid) continue;$_subcategory = Mage::getModel('catalog/category')->load($subCatid);if($_subcategory->getIsActive()) {array_push($queueArr,$subCatid);}}reset($queueArr);}return $resArr; } //測試一下 $allProducerIds = getAllChildrenOfCategory(19); $allDesignedIds = getAllChildrenOfCategory(18);PHP沒有棧和隊列的數(shù)據(jù)結(jié)構(gòu),可以用數(shù)組來模擬實現(xiàn),數(shù)組的array_push和array_pop剛好就是這么兩個方法,其中因為array_pop每次會改變數(shù)組的指針,所以可以在循環(huán)的末尾reset一下重置數(shù)組。
最后的測試,輸入的是兩個分類的ID,函數(shù)執(zhí)行結(jié)束以后,返回的數(shù)組里面就是所有子分類的ID。
轉(zhuǎn)載于:https://www.cnblogs.com/crazyant/archive/2012/11/10/2823896.html
總結(jié)
以上是生活随笔為你收集整理的Magento获取指定分类下的所有子分类信息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript中的私有成员
- 下一篇: HDU ACM 4031 Attack