不推荐使用集合可见性和状态过滤器,应该使用什么?

时间:2013-02-04 07:05:19

标签: php magento collections filter deprecated

addVisibleFilterToCollection()的{​​{1}}和addSaleableFilterToCollection()方法使用@deprecated注释,但没有关于使用什么方法的说明。 Magento核心内部的代码仍在使用这些方法,参考Mage_Catalog_Model_Product_Status

应该使用哪种方法使用正确的可见性/可销售过滤器来装饰集合?

3 个答案:

答案 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