7

addVisibleFilterToCollection()およびaddSaleableFilterToCollection()メソッドには @deprecatedのMage_Catalog_Model_Product_Status注釈が付けられていますが、代わりにどのアプローチを使用するかについての指示はありません。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 フィルターをコレクションに設定します。

ステータスの場合、少し奇妙に見えますが、それでも意味があります。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 に答える