2013-02-04 4 views
7

addVisibleFilterToCollection()およびaddSaleableFilterToCollection()の方法はMage_Catalog_Model_Product_Statusですが、@ deprecatedと注釈が付けられていますが、代わりにどのようなアプローチを使用するかについての指示はありません。 Magentoのコア内のコードはまだこれらのメソッドを使用しています(ref Mage_Catalog_Model_Layer::prepareProductCollection())。コレクションの可視性とステータスフィルタは廃止されましたが、代わりに何を使用する必要がありますか?

正しい可視性/売り手のフィルタでコレクションを装飾するためにはどのようなアプローチを使用する必要がありますか?

addAttributeToFilter('visibility',Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH) 

addAttributeToFilter('status',1) 

答えて

1

は、あなたが一般的なアプローチを試してみましたDIDコレクションにカタログと両方のフィルタを設定します

Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection); 

ステータスこれはちょっと変わって見えますが、それでも意味があります。以下が行われているアプリ/コード/コア/メイジ/カタログ/モデル/リソース/製品/ Collection.php で_initSelectで :

Mage::getResourceModel('catalog/product_collection') 

を行うとき

$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))); 

このコードが実行されますしたがって、基本的にステータスENABLEDは、実行時にチェックされています。

$category->getProductCollection() 

または類似した製品の収集コールです。

3

可視性について(Mage_Catalog_Model_Layerから:: prepareProductCollection())がある:

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

関連する問題