addVisibleFilterToCollection()
的{{1}}和addSaleableFilterToCollection()
方法使用@deprecated注释,但没有关于使用什么方法的说明。 Magento核心内部的代码仍在使用这些方法,参考Mage_Catalog_Model_Product_Status
。
应该使用哪种方法使用正确的可见性/可销售过滤器来装饰集合?
答案 0 :(得分:3)
对于可见性,有(来自Mage_Catalog_Model_Layer :: prepareProductCollection()):
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
将CATALOG和BOTH过滤器设置为集合。
对于状态,它看起来有点奇怪但仍然有意义。 在app / code / core / Mage / Catalog / Model / Resource / Product / Collection.php中的_initSelect中 完成以下操作:
$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')
所以基本上在执行
时已经检查了状态ENABLED$category->getProductCollection()
或类似的产品收集电话。
答案 1 :(得分:1)
您是否尝试过常用方法:
addAttributeToFilter('visibility',Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH)
addAttributeToFilter('status',1)
答案 2 :(得分:0)
如果你看第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