国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 網(wǎng)站 > 建站經(jīng)驗(yàn) > 正文

Magento中顯示指定分類產(chǎn)品 子分類及分類產(chǎn)品數(shù)量

2024-08-30 19:06:38
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文章來(lái)給大家介紹在Magento中顯示指定分類產(chǎn)品 子分類及分類產(chǎn)品數(shù)量的實(shí)現(xiàn)程序,方法也很簡(jiǎn)單的,各位朋友可參考.

二次開(kāi)發(fā)中經(jīng)常遇到一種情況,就是判斷一個(gè)分類是否屬于某一個(gè)大的分類,而大的分類包括很多子分類成樹(shù)狀結(jié)構(gòu),基本的方法都是先獲取大分類下的所有子分類的信息,然后再挨個(gè)比較看是否有ID和待定ID相等,一種用遞歸方法獲取大分類所有的ID,第二種用隊(duì)列等非遞歸的方法獲取所有子分類ID,第二種明顯性能要好一些.

本文在magento的模板文件里測(cè)試成功一個(gè)函數(shù):輸入一個(gè)分類的ID,將返回該分類下所有子分類(遞歸獲取)的ID,組成一個(gè)數(shù)組返回,所用的方法為用隊(duì)列實(shí)現(xiàn)的非遞歸方法,代碼如下:

  1. /** 
  2. * 輸入:某一個(gè)分類的ID數(shù)字 
  3. * 返回: 該分類下所有子分類的ID組成的數(shù)組 
  4. * 可用于: 模板文件中可以直接使用,也可以用于action等文件類內(nèi)部 
  5. * 實(shí)現(xiàn)思路:使用隊(duì)列的方法實(shí)現(xiàn)非遞歸,對(duì)樹(shù)從上往下遍歷 
  6. **/ 
  7. function getAllChildrenOfCategory($cateid){ 
  8.  $resArr = array();//結(jié)果數(shù)組 
  9.  $queueArr = array();//隊(duì)列數(shù)組 
  10.  array_push($queueArr,$cateid); 
  11.  
  12.  while($currentcid = array_pop($queueArr)){ 
  13.   array_push($resArr,$currentcid);            
  14.   //處理當(dāng)前節(jié)點(diǎn)的孩子節(jié)點(diǎn) 
  15.   $_category = Mage::getModel('catalog/category')->load($currentcid); 
  16.   $subcats = $_category->getChildren(); 
  17.    
  18.   $idarrs = explode(',',$subcats); 
  19.   foreach($idarrs as $subCatid){ 
  20.    if(!$subCatidcontinue
  21.    $_subcategory = Mage::getModel('catalog/category')->load($subCatid); 
  22.    if($_subcategory->getIsActive()) { 
  23.     array_push($queueArr,$subCatid); 
  24.    }  //開(kāi)源軟件:Vevb.com 
  25.   } 
  26.   reset($queueArr); 
  27.  } 
  28.  return $resArr
  29. //測(cè)試一下 
  30. $allProducerIds = getAllChildrenOfCategory(19); 
  31. $allDesignedIds = getAllChildrenOfCategory(18); 

PHP沒(méi)有棧和隊(duì)列的數(shù)據(jù)結(jié)構(gòu),可以用數(shù)組來(lái)模擬實(shí)現(xiàn),數(shù)組的array_push和array_pop剛好就是這么兩個(gè)方法,其中因?yàn)閍rray_pop每次會(huì)改變數(shù)組的指針,所以可以在循環(huán)的末尾reset一下重置數(shù)組.

最后的測(cè)試,輸入的是兩個(gè)分類的ID,函數(shù)執(zhí)行結(jié)束以后,返回的數(shù)組里面就是所有子分類的ID,如果我們要調(diào)用指定分類下的產(chǎn)品和獲取子分類及產(chǎn)品數(shù)量 上面辦法實(shí)現(xiàn)不完美.

Magento首頁(yè)及分類頁(yè)面?zhèn)冗厵诮?jīng)常需要調(diào)用某一個(gè)分類下的產(chǎn)品,例如首頁(yè)的Featured Product等,這些分類一般保持不激活狀態(tài),我們可以添加店鋪中比較暢銷的產(chǎn)品到該分類中,并從前臺(tái)調(diào)用,下面一段代碼主要用處就是在Magento中獲取指定分類下的產(chǎn)品,代碼如下:

  1. $products = Mage::getModel('catalog/category')->load($category_id
  2.   ->getProductCollection() 
  3.   ->addAttributeToSelect('*'
  4.   ->addAttributeToFilter('status', 1) 
  5.   ->addAttributeToFilter('visibility', 4); 

將上面的$category_id修改為需要顯示產(chǎn)品的分類id,該id可以在分類頁(yè)面中看到,上述代碼中還捎帶了一些過(guò)濾,產(chǎn)品狀態(tài)為激活,并處于可見(jiàn)狀態(tài).

很多Magento的項(xiàng)目中,客戶需求將每個(gè)當(dāng)前分類下的每個(gè)子分類以及該分類下的產(chǎn)品數(shù)量全部顯示出來(lái),類似于Category (108)的形式.

想實(shí)現(xiàn)這種效果,就必須要知道如何獲取當(dāng)前分類的子分類,并了解Product Collection類中的count()方法,該方法用于獲取任意形式下對(duì)于Product Collection進(jìn)行篩選后的產(chǎn)品數(shù)量,代碼如下:

  1. // 獲取當(dāng)前分類模型 
  2. $currCat = Mage::registry('current_category'); 
  3.  
  4. //獲取當(dāng)前分類的所有子分類的模型集合 
  5. $collection = Mage::getModel('catalog/category')->getCategories($currCat->getEntityId()); 
  6.  
  7. //循環(huán)子分類的模型集合 
  8. foreach($collection as $cat) { 
  9.     if($cat->getIsActive()) { 
  10.         $category = Mage::getModel('catalog/category')->load($cat->getEntityId()); 
  11.  
  12.         //獲取子分類的產(chǎn)品Collection,并通過(guò)count()方法,獲取該子分類的產(chǎn)品數(shù)量 
  13.         $prodCollection = Mage::getResourceModel('catalog/product_collection')->addCategoryFilter($category); 
  14.         Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($prodCollection); 
  15.         Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($prodCollection); 
  16.  
  17.         $html .= '<a href="<?php echo $category->getUrl() ?>"><?php echo $category->getName() ?></a> (<?php echo $prodCollection->count() ?>)<br/>'
  18.     } 
  19. }

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 法库县| 郯城县| 扎囊县| 遵义县| 丰镇市| 玛多县| 丰台区| 原平市| 茂名市| 新安县| 咸丰县| 龙陵县| 泗洪县| 新邵县| 久治县| 孟村| 绍兴市| 鄂托克旗| 石家庄市| 贵德县| 揭阳市| 大丰市| 靖边县| 厦门市| 大洼县| 潢川县| 贵定县| 辉县市| 白山市| 长武县| 汉川市| 阳东县| 阳朔县| 遂溪县| 麻城市| 喜德县| 永泰县| 永修县| 子洲县| 革吉县| 福海县|