的addVisibleFilterToCollection()
和addSaleableFilterToCollection()
方法Mage_Catalog_Model_Product_Status
用@deprecated 注释,但没有说明使用什么方法。Magento 核心中的代码仍在使用这些方法, ref Mage_Catalog_Model_Layer::prepareProductCollection()
。
应该使用什么方法来装饰具有正确可见性/可销售过滤器的集合?
的addVisibleFilterToCollection()
和addSaleableFilterToCollection()
方法Mage_Catalog_Model_Product_Status
用@deprecated 注释,但没有说明使用什么方法。Magento 核心中的代码仍在使用这些方法, ref Mage_Catalog_Model_Layer::prepareProductCollection()
。
应该使用什么方法来装饰具有正确可见性/可销售过滤器的集合?
对于可见性,有(来自 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')
所以基本上在执行时已经检查了状态 ENABLED
$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