7

addVisibleFilterToCollection()addSaleableFilterToCollection()方法Mage_Catalog_Model_Product_Status用@deprecated 注释,但没有说明使用什么方法。Magento 核心中的代码仍在使用这些方法, ref Mage_Catalog_Model_Layer::prepareProductCollection()

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

4

3 回答 3

3

对于可见性,有(来自 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()

或类似产品集合电话。

于 2014-02-03T10:15:58.230 回答
1

您是否尝试过常用方法:

addAttributeToFilter('visibility',Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH)

addAttributeToFilter('status',1)
于 2013-02-04T08:10:08.543 回答
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

于 2017-11-08T17:14:05.877 回答