Magento无限极分类(一个牛逼的算法)
最近在做magento对接ios跟安卓的对接数据,在分类上上 ios跟安卓的返回数据不一样。安卓需要一次性返回数据。
<?php
class App_ClientApi_Model_Category extends App_ClientApi_Model_Abstract {
public function getAllCategory() {
$cacheKey = 'classlist_all_' . $this->getStore ()->getId ();
$cacheData = $this->getCacher ()->load ( $cacheKey );
if ($cacheData)
return $cacheData;
try {
$categoryCollection=Mage::getModel('catalog/category')->getCollection();
$categoryCollection->addAttributeToSelect('name')
->addAttributeToSelect('thumbnail')
->addAttributeToSelect('image')
->addAttributeToSelect('display_mode')
->addAttributeToFilter('is_active', 1)
->addAttributeToSort('app_sort');
$childCategoryIds=array();
foreach ($categoryCollection as $child){
if($child->getParentId()==1)continue;
$temp = array (
'classid' => $child->getEntityId (),
'name' => $child->getName (),
'image' => $child->getImage(),
'thumbnail' => $child->getThumbnail(),
'merchant' => $child->getMerchant(),
// 'has_sub'=>$child->getData('children_count') ? true : false,
'hasSub' => $child->getData ( 'children_count' ) ? true : false,
'parentId'=>$child->getParentId(),
);
if (! $child->getData ( 'display_mode' )) {
$child->setData ( 'display_mode', $child->getDisplayMode());
}
if ($child->getData ( 'display_mode' ) == 'PRODUCTS') { // || $child->getData('display_mode')=='PRODUCTS_AND_PAGE'
$temp ['isClass'] = false;
} else {
$temp ['isClass'] = true;
}
if ($temp ['image']) {
$temp ['image'] = Mage::getBaseUrl ( Mage_Core_Model_Store::URL_TYPE_MEDIA ) . 'catalog/category/' . $temp ['image'];
} else {
$temp ['image'] = "";
}
if ($temp ['thumbnail']) {
$temp ['thumbnail'] = Mage::getBaseUrl ( Mage_Core_Model_Store::URL_TYPE_MEDIA ) . 'catalog/category/' . $temp ['thumbnail'];
} else {
$temp ['thumbnail'] = "";
}
if ($temp ['merchant']) {
$temp ['merchant'] = Mage::getBaseUrl ( Mage_Core_Model_Store::URL_TYPE_MEDIA ) . 'catalog/category/' . $temp ['merchant'];
} else {
$temp ['merchant'] = "";
}
$data [] = $temp;
}
} catch ( Exception $e ) {
echo $e->getMessage ();
}
$returnData = array (
'data' => $data
);
if (count ( $data ) <= 0) {
$returnData ['status'] = App_ClientApi_Helper_Data::STATUS_FAILED;
$returnData ['data'] = 'There is no data under this category.';
}
$this->getCacher ()->save ( $cacheKey, $returnData );
return $returnData;
}
public function getAllSortCategory(){
$cacheKey = 'classlist_all_sort' . $this->getStore ()->getId ();
$cacheData = $this->getCacher ()->load ( $cacheKey );
if ($cacheData)
return $cacheData;
$rootId=Mage::app ()->getDefaultStoreView ()->getRootCategoryId ();
$result=$this->getAllCategory();
$index=array();
foreach ($result['data'] as $val){
$index[$val['classid']]=$val;
}
$data=$this->generateTree($index,$rootId);
$returnData = array (
'data' => $data
);
if (count ( $data ) <= 0) {
$returnData ['status'] = App_ClientApi_Helper_Data::STATUS_FAILED;
$returnData ['data'] = 'There is no data under this category.';
}
$this->getCacher ()->save ( $cacheKey, $returnData );
return $returnData;
}
//这种效率高,比php+mysql层层调用效率提高很大(牛逼的算法,网上查的,嘿嘿)
protected function generateTree($items,$rootId){
$tree = array();
foreach($items as $item){
if(isset($items[$item['parentId']])&&$item['parentId']!=$rootId){
$items[$item['parentId']]['son'][] = &$items[$item['classid']];
}else{
$tree[] = &$items[$item['classid']];
}
}
return $tree;
}
}
浙公网安备 33010602011771号