收藏集可见性和状态过滤器已被弃用,应该使用什么替代?

7

Mage_Catalog_Model_Product_Status中的addVisibleFilterToCollection()addSaleableFilterToCollection()方法已被标注为@deprecated,但没有说明应该使用什么方法代替。Magento核心代码仍在使用这些方法,参见Mage_Catalog_Model_Layer::prepareProductCollection()

在装饰集合以正确过滤可见性/可销售性方面,应该采用什么方法?

3个回答

4

对于可见性(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()

或类似产品系列的呼叫。

1

你尝试过常见的方法吗:

addAttributeToFilter('visibility',Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH)

addAttributeToFilter('status',1)

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接