Mage_Catalog_Model_Product_Status
的addVisibleFilterToCollection()
和addSaleableFilterToCollection()
方法都用@deprecated注释,但没有关于使用哪种方法的说明。Magento核心中的代码仍在使用这些方法,参考Mage_Catalog_Model_Layer::prepareProductCollection()
。
应该使用什么方法来用正确的可见性/可销售过滤器装饰收藏品?
对于可见性,有(来自Mage_Catalog_Model_Layer::p repareProductCollection()):
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
这会将目录和两个过滤器设置为集合。
对于状态,它看起来有点奇怪,但仍然有意义。在应用程序/代码/核心/法师/目录/模型/资源/产品/集合中_initSelect.php完成以下操作:
$this->getSelect()
->from(array(self::MAIN_TABLE_ALIAS => $this->getEntity()->getFlatTableName()), null)
->columns(array('status' => new Zend_Db_Expr(Mage_Catalog_Model_Product_Status::STATUS_ENABLED)));
此代码在执行
Mage::getResourceModel('catalog/product_collection')
所以基本上在执行
$category->getProductCollection()
或类似的产品集合调用。
您是否尝试过常用方法:
addAttributeToFilter('visibility',Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH)
addAttributeToFilter('status',1)
如果你看第66行
app/code/core/Mage/Catalog/Model/Product/Visibility.php
您将看到已弃用的调用被注释掉并替换为
$collection->setVisibility($this->getVisibleInCatalogIds());
这是我如何使用我的重构
$this->_itemCollection->setVisibility($this->getVisibleInCatalogIds());
// Deprecated: Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($this->_itemCollection);
如果您想了解有关已弃用函数的更多信息,请查看此处:http://freegento.com/doc/dc/d5b/_visibility_8php-source.html