Magento 1.9中setPage分页失效,无法按5条分组获取产品
解决Magento集合分页返回全部产品的问题
我来帮你捋捋这个问题,你遇到的情况在Magento开发里挺常见的,主要是几个细节没踩对:
1. setPage()的页码参数用错了
Magento的setPage()方法第一个参数是页码,从1开始计数,不是0!你写的setPage(0,5)属于无效参数,集合会直接返回全部数据。正确的写法应该是这样:
$Category = Mage::getModel('catalog/category')->load(12); $collection = $Category->getProductCollection(); // 设置第1页,每页5条数据 $collection->setPage(1, 5); // 先手动加载集合(关键步骤) $collection->load(); // 现在输出的就是当前页的产品数量了 echo count($collection);
2. 别搞混count()和getSize()的作用
你之前用count($tot)返回总数量,是因为Magento集合的count()方法在集合未加载时,会自动执行不带分页的COUNT(*)查询来获取总记录数;只有当你调用load()加载集合后,count($collection)才会返回当前页的实际产品数量。
如果要获取全量产品总数,用$collection->getSize();要获取当前页的产品数,确保集合加载后用count($collection)。
3. 直接用limit()的注意事项
你尝试的$collection->getSelect()->limit(20)没生效,是因为Magento的集合分页逻辑(setPage())会优先覆盖limit的设置,而且有些第三方模块可能会通过观察者事件修改集合规则。如果一定要用limit,得确保在加载集合前调用,且没有其他代码干扰:
$collection = Mage::getModel('catalog/product')->getCollection(); $collection->getSelect()->limit(5); $collection->load(); echo count($collection);
额外提醒
- 检查是否有第三方模块的观察者事件,强制修改了你的产品集合分页条件
- 如果需要展示前台可见的产品,记得加上默认过滤规则:
$collection->addAttributeToFilter('status', Mage_Catalog_Model_Product_Status::STATUS_ENABLED); $collection->addAttributeToFilter('visibility', Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH);
内容的提问来源于stack exchange,提问作者maiItsyuj
相关产品推荐
相关产品推荐

