Magento中显示指定分类产品 子分类及分类产品数量

二次开发中经常遇到一种情况,就是判断一个分类是否属于某一个大的分类,而大的分类包括很多子分类成树状结构,基本的方法都是先获取大分类下的所有子分类的信息,然后再挨个比较看是否有ID和待定ID相等。一种用递归方法获取大分类所有的ID;第二种用队列等非递归的方法获取所有子分类ID,第二种明显性能要好一些。

本文在magento的模板文件里测试成功一个函数:输入一个分类的ID,将返回该分类下所有子分类(递归获取)的ID,组成一个数组返回。所用的方法为用队列实现的非递归方法:

 代码如下 复制代码

/**
* 输入:某一个分类的ID数字
* 返回: 该分类下所有子分类的ID组成的数组
* 可用于: 模板文件中可以直接使用,也可以用于action等文件类内部
* 实现思路:使用队列的方法实现非递归,对树从上往下遍历
**/
function getAllChildrenOfCategory($cateid){
 $resArr = array();//结果数组
 $queueArr = array();//队列数组
 array_push($queueArr,$cateid);
 
 while($currentcid = array_pop($queueArr)){
  array_push($resArr,$currentcid);           
  //处理当前节点的孩子节点
  $_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没有栈和队列的数据结构,可以用数组来模拟实现,数组的array_push和array_pop刚好就是这么两个方法,其中因为array_pop每次会改变数组的指针,所以可以在循环的末尾reset一下重置数组。

最后的测试,输入的是两个分类的ID,函数执行结束以后,返回的数组里面就是所有子分类的ID,如果我们要调用指定分类下的产品和获取子分类及产品数量 上面办法实现不完美

Magento首页及分类页面侧边栏经常需要调用某一个分类下的产品,例如首页的Featured Product等。这些分类一般保持不激活状态,我们可以添加店铺中比较畅销的产品到该分类中,并从前台调用。下面一段代码主要用处就是在Magento中获取指定分类下的产品。

 代码如下 复制代码

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

将上面的$category_id修改为需要显示产品的分类id,该id可以在分类页面中看到。上述代码中还捎带了一些过滤,产品状态为激活,并处于可见状态。

 很多Magento的项目中,客户需求将每个当前分类下的每个子分类以及该分类下的产品数量全部显示出来,类似于Category (108)的形式。如下所示

想实现这种效果,就必须要知道如何获取当前分类的子分类,并了解Product Collection类中的count()方法。该方法用于获取任意形式下对于Product Collection进行筛选后的产品数量。

 代码如下 复制代码

// 获取当前分类模型
$currCat = Mage::registry('current_category');
 
//获取当前分类的所有子分类的模型集合
$collection = Mage::getModel('catalog/category')->getCategories($currCat->getEntityId());
 
//循环子分类的模型集合
foreach($collection as $cat) {
    if($cat->getIsActive()) {
        $category = Mage::getModel('catalog/category')->load($cat->getEntityId());
 
        //获取子分类的产品Collection,并通过count()方法,获取该子分类的产品数量
        $prodCollection = Mage::getResourceModel('catalog/product_collection')->addCategoryFilter($category);
        Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($prodCollection);
        Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($prodCollection);
 
        $html .= '<a href="<?php echo $category->getUrl() ?>"><?php echo $category->getName() ?></a> (<?php echo $prodCollection->count() ?>)<br/>';
    }
}

时间: 2024-12-22 06:35:20

Magento中显示指定分类产品 子分类及分类产品数量的相关文章

在cmd中显示指定行的内容

  最近,有同事问道,在cmd中运行某命令后,如何显示指定行的内容? 在这举个例子: 在cmd中运行systeminfo后,显示"系统启动时间":systeminfo | find /i "系统启动时间" 解释:在所运行的命令后加个find命令,/i表示忽略大小写,后面再带上你要显示的那行的标志性字符串即可! 执行效果如下: Microsoft Windows [版本 6.3.9600] (c) 2013 Microsoft Corporation.保留所有权利.

word 2010 在页眉页脚中显示指定的图片

  word文档中的页眉或者页脚不仅可以增加文本描述,还可以生动的添加图片描述.想在word2010的页眉或者页脚岔路单位的徽标.个人的标识.公司的logo等图片,可以根据以下步骤设置,一起学习下吧. 一.打开Word2010文档窗口,切换到"插入"功能区.在"页眉和页脚"分组中单击页眉或页脚按钮(本例单击"页眉"按钮),并在打开的页眉面板中选择"编辑页眉"命令,如图1所示. 图1 选择"编辑页眉"命令 第

wordpress页面显示指定分类文章操作方法

wordpress页面显示指定分类文章: 首先需要创建一个特殊页面模板,直接复制主题中的index.php 文件,把文件名修改为你想要的模板名字,如:tips.php. 然后在tips.php文件最上部添加如下代码:  代码如下 复制代码 <?php /* Template Name:tips */ ?> <?php if (have_posts()) : ?> 在上面这行代码的前面加上:  代码如下 复制代码 <?php query_posts('showposts=10

WordPress中获取指定分类及其子分类下的文章数目_php实例

获取特定分类文章数  有时候我们想获取某个分类(category)下的文章数目,以便在博客的某个地方显示出来.下面就提供几个获取特定分类的文章数的方法,你可以根据个人喜好选择: 方法一:      将以下PHP代码放置在主题目录下的functions.php中: function wt_get_category_count($input = '') { global $wpdb; if($input == '') { $category = get_the_category(); return

详解WordPress开发中用于获取分类及子页面的函数用法_php技巧

get_categoryget_category 可能我们平时接触的不多,但却是很有用,网上这个函数介绍的貌似不多,所以今天只针对官方 WordPress 英文文档做一下翻译. 函数描述 获得指定分类,以数组或是对象的形式返回. 函数使用 get_category( $cat, $out, $filter ) 参数描述 $cat:分类ID,或 $out返回值类型[OBJECT, ARRAY_A, or ARRAY_N] $filter 函数返回值 这里主要讲一下对象类型的返回值, 都有注释,请自

magento -- 获得产品所属于的分类

在Magento中,一个产品可以同时属于多个分类,下面的代码可以在产品页获得当前产品的所有父分类   $categories = $_product->getCategoryCollection(); foreach($categories as $_category) { // do something }

JSP页面无法在指定的子框架中显示,哪里出错了

问题描述 这是left.jsp,其中点击客户管理,希望lookClient.jsp页面在main子框架中显示,以下是left.jsp代码:<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"

产品经理需要解决问题 产品经理必须是分类控

文章描述:我们对整个商品的描述很完整,也很完美,有了属性以后,我们分1亿商品都能轻松搞定.但是,接下来新出现的问题才是更严重的. 产品经理必须是分类控,而商品管理的核心,或者说基础就是"分类","分类"方法的变迁是整个商品系统变迁的核心. 你应该在淘宝上买过东西,我们来说说最常见的购物过程: 从某个入口类页面(或广义到产品)开始,经过某种导购过程,到达需要你做交易决策的页面,之后进入交易过程. 入口,最典型的是淘宝首页或某个活动页面,当然,对于一些资深的淘宝买家,他

destoon实现调用当前栏目分类及子分类和三级分类的方法_php实例

调用当前栏目分类及子分类和三级分类是程序设计里常用的方法,本文就来详细讲述destoon实现调用当前栏目分类及子分类和三级分类的方法.具体操作如下: 在destoon中提供了如下的调用语句: 一级分类名: {$m[catname]} 二级分类名: {$c[catname]} 三级分类名: {$b[catname]} 具体调用示例如下: 一.直接调用分类名称和链接: {loop $maincat $i $m}<dl> {php $child = get_maincat($maincat, $CA