【问题标题】:Magento - getting the wrong number of the method count()Magento - 获取方法count()的错误编号
【发布时间】:2011-05-11 23:24:01
【问题描述】:

嗨 我已将 12 个产品分配给类别电话(id=12),并且

{{block type="catalog/product_list" category_id="12" template="catalog/product/list2.phtml"}}

在一个CMS页面中,我已经放置了

$_productCollection=$this->getLoadedProductCollection();
echo $_productCollection->count()
?>

到list2.phtml

为什么是 9 而不是 12?

我在后台设置了“Products per Page on Grid Default Value=9”,这会影响上面的结果吗?如何解决?

谢谢你

【问题讨论】:

  • 在 Mage_Catalog_Block_Product_List 的 _getProductCollection() 方法中设置断点并使用例如 xdebug 和 PDT 进行调试。请注意,如果没有适当的调试环境,很难在 Magento 上做任何事情。
  • 感谢您的建议,抱歉 Magento API 不好

标签: magento


【解决方案1】:

而不是...

echo $_productCollection->count()

...试试这个方法:

echo $_productCollection->getSize()

在内部getSize() 使用getSelectCountSql(),它采用原始选择语句,去除页面限制并直接查询数据库。因此,即使加载了较短的分页列表,它也会返回正确的答案。而count() 返回加载列表中的实际项目数。

【讨论】:

  • 只是添加到@clockworkgeek - 加载列表中的项目数不是完整集合大小的原因是由于集合被分页。默认情况下,Magento 将使用管理员中的设置进行分页(默认为每页 9 个)。
  • 我还发现对我最近的 Magento 修改之一使用 count($collection->getData()) 很有用。它似乎比某些替代方法更快,尽管我认为 getSize() 可能会做同样的事情。
  • @adpro 该方法在结果分页时会给出错误的数字,就像在原始问题中一样。 getSize() 以不同的方式工作,并且对于大型集合的工作速度更快。通过调用getData(),您将跳过正常加载的一些部分,这比count() 稍快,但也意味着您可能会错过一些重要的处理。请不要建议人们使用该 hack。
猜你喜欢
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多