Mage_Catalog_Model_Product_Status
中的addVisibleFilterToCollection()
和addSaleableFilterToCollection()
方法已被标注为@deprecated,但没有说明应该使用什么方法代替。Magento核心代码仍在使用这些方法,参见Mage_Catalog_Model_Layer::prepareProductCollection()
。
在装饰集合以正确过滤可见性/可销售性方面,应该采用什么方法?
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过滤器设置为集合。
对于Status,它看起来有点奇怪,但仍然有意义。 在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')
基本上,当执行某些操作时,状态“启用”已经被选中。
$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