Mage_Catalog_Model_Product_Status的addVisibleFilterToCollection()和addSaleableFilterToCollection()方法使用@deprecated注释,但是没有关于使用什么方法的指令. Magento核心内部的代码仍在使用这些方法,参考Mage_Catalog_Model_Layer :: prepareProductCollection().
应该使用什么方法用正确的可见性/可销售过滤器来装饰集合?
对于Visibility,有(来自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()
或类似的产品收集电话.