我正在尝试过滤list.phtml以满足我的需求,只显示基于属性值的产品。加载产品集合的原始代码是:
$_productCollection=$this->getLoadedProductCollection();
$_helper = $this->helper('catalog/output');
要进行过滤我得到了代码:
$_productCollection=$this->getLoadedProductCollection();
$cat_id = Mage::getModel('catalog/layer')->getCurrentCategory()->getId();
$_productCollection = Mage::getResourceModel('catalog/product_collection')
->addAttributeToFilter('language', array('eq' => array('English')))
->addAttributeToSelect('*')
->addCategoryFilter(Mage::getModel('catalog/category')->load($cat_id));
$_helper = $this->helper('catalog/output');
然而,分页和项目总数(从toolbar.phtml和pager.phtml生成)是不正确的。例如,原始产品集合具有7页的正确分页和每页10个产品。
然而,当我使用上面显示的过滤器时,分页在一页上显示相同的7页和每个过滤的书(有18本英文书籍,因此18本书中有7页是重复的。)
请有人帮我解决这个分页问题。
感谢。
该集合的SQL如下:
SELECT `e`.*, `at_language`.`value` AS `language`, `cat_index`.`position`
AS `cat_index_position` FROM `catalog_product_entity`
AS `e` INNER JOIN `catalog_product_entity_varchar`
AS `at_language` ON (`at_language`.`entity_id` = `e`.`entity_id`)
AND (`at_language`.`attribute_id` = '1002')
AND (`at_language`.`store_id` = 0) INNER JOIN `catalog_category_product_index`
AS `cat_index` ON cat_index.product_id=e.entity_id AND cat_index.store_id=1
AND cat_index.visibility IN(2, 4) AND cat_index.category_id='38'
AND cat_index.is_parent=1 WHERE (at_language.value = 'English')
答案 0 :(得分:5)
在list.phtml文件中使用它:
$_productCollection->clear()
->addAttributeToFilter('attribute_set_id', array('eq' => 63))
->load();
答案 1 :(得分:4)
我的猜测是产品数量错误,因为缺少产品可见性过滤器。尝试添加如下:
$_productCollection = Mage::getResourceModel('catalog/product_collection')
->addAttributeToFilter('language', array('eq' => array('English')))
->addAttributeToSelect('*')
->addCategoryFilter(Mage::getModel('catalog/category')->load($cat_id))
->setVisibility(
Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds()
);
此外:
您设置为list.phtml
的自定义集合与系统在分页器中使用的自定义集合不同。分页器块Mage_Catalog_Block_Product_List_Toolbar
将从$this->_getProductCollection()
(see here)获取原始产品集合,该集合没有您的过滤器。
我担心,对模板文件中的集合进行更改是不够的。您可能必须覆盖Mage_Catalog_Block_Product_List
块,特别是其函数_getProductCollection()
,以实现必要的过滤。
另外2
函数Mage_Catalog_Block_Product_List::_getProductCollection
的建议覆盖:
protected function _getProductCollection()
{
$collection = parent::_getProductCollection();
$collection->addAttributeToFilter('language', array('eq' => array('English')));
$this->_productCollection = $collection;
return $this->_productCollection;
}