【问题标题】:Magento - Get total number of items of a category in view.phtmlMagento - 获取 view.phtml 中某个类别的项目总数
【发布时间】:2013-07-04 19:46:06
【问题描述】:
我怎样才能得到项目的总数,我想在类别 view.phtml 文件中显示它。通常这个值在 Toolbar.phtml 中。
我已经尝试过这样的事情,但我认为我很遥远:
$this->helper('catalog/output')->$_productCollection->count()
Magento 版本 1.7.0.2
预期的结果应该是这样的:
此类别中的项目:17
17 应该是总数。如果可能,应包括子类别项目。
【问题讨论】:
标签:
magento
count
categories
【解决方案1】:
假设您想在 view.phtml 中显示它,您已经有当前类别对象,因此您可以使用$_category->getId()
$products_count = Mage::getModel('catalog/category')->load($_category->getId())
->getProductCount();
echo($products_count);
如果你想在 list.phtml 中使用它可以使用
echo($_productCollection->count());
【解决方案2】:
试试这个,
<?php $_helper = $this->helper('catalog/output');?>
<?php $_category_detail = Mage::registry('current_category');?>
<?php $_category_detail->getName();?>
<?php $_category_detail->getId(); ?>
<?php $products_count = Mage::getModel('catalog/category')->load($_category_detail->getId())
->getProductCount();
echo($products_count);
?>
【解决方案3】:
基本上,您无法在 view.phtml 中显示过滤项目的总数。
原因是,获取总金额的逻辑不存在于 view.phtml 的 $this 上下文中。
但是该逻辑在 Mage_Catalog_Block_Product_List_Toolbar 块中可用,它是 Mage_Catalog_Block_Product_List 的子块。
这基本上意味着您实际上可以通过实例化工具栏和列表块来获得过滤项目的总数。
之后,工具栏块的集合必须设置为列表块集合的值。
在 view.phtml 文件中使用以下代码从工具栏块中获取过滤项的总数:
$toolbar = new Mage_Catalog_Block_Product_List_Toolbar();
$list = new Mage_Catalog_Block_Product_List();
$toolbar-> setCollection($list -> getLoadedProductCollection());
$products_count = $toolbar -> getTotalNum();
【解决方案4】:
我们可以通过两种方式找到一个类别的产品数量。
$collection = Mage::getModel('catalog/category')->getCollection()
->addAttributeToSelect('name')
->addAttributeToSelect('level')
->addAttributeToSelect('entity_id');
foreach($collection as $cat)
$cat->getProductCount();
这只会为您提供最深类别的产品数量。例如,您有以下类别。考虑树状结构。
衣服(6)
->棉花(3)
->女性(2)
上面给出的一段代码返回的结果。
衣服(3)
棉花(1)
女性(2)
有 3 种产品直接与 Clothes only 相关联,1 种仅与 Cotton 相关,2 种仅与 Women。所以它只是忽略了子类别。
另一种方法是从产品角度获取产品数量。
$current_category = Mage::getModel('catalog/category')->load($cat->getEntityId());
$productCount = Mage::getModel('catalog/product')->getCollection()
->addFieldToFilter('manufacturer',$this->manufacturer["id"])
->addFieldToFilter('visibility',4)
->addFieldToFilter('status',1)
->addCategoryFilter($current_category)->getSize();
这为我们提供了过滤产品属性的额外好处。但是在上述情况下,返回的计数会略有不同。
它将返回 Clothes (6),因为它有 3 种产品与自身相关联,另外 3 种产品与其子类别相关联。相似地
棉花(3)
女性(2)。
因此,为了获得有效的结果,最好将两者混合使用。
【解决方案5】:
在视图中加载额外的模型是不对的,因为您已经有模型实例,您可以从中检索产品集合。
$this->getCurrentCategory()->getProductCollection()->count();
【解决方案6】:
它非常简单,对我来说效果很好,只需一行代码
<?php echo Mage::registry('current_category')->getProductCount();?>
会显示当前分类的产品数量