1

カテゴリ ページに単純な製品のみを表示する必要がありますが、構成可能な製品からアクティブな製品ページが必要なため、構成可能な製品に「非表示」を設定することはできません。

リストから構成可能なものを削除する次のコードを見つけました。

  $_productCollection=$this->getLoadedProductCollection();
  $_productCollection = clone $this->getLoadedProductCollection();
  $_productCollection->clear()
                     ->addAttributeToFilter('type_id', 'simple')
                     ->load();

  $_helper = $this->helper('catalog/output');

機能しますが、階層化されたナビゲーションでは、構成可能な製品がまだカウントされています。「色:赤(2)」みたいな感じですが、赤(シンプル)は1つだけです。構成可能な製品を完全に削除するにはどうすればよいですか?

4

1 に答える 1

2

レイヤード ナビゲーションは、個別に読み込まれるコレクション オブジェクトを使用します。

ナビゲーション フィルターの横にある正しいカウントを確実にする方法の 1 つは、モデルをオーバーライドMage_Catalog_Model_Layerしてフィルターをその関数に追加することです。Mage_Catalog_Model_Layer::prepareProductCollection

public function prepareProductCollection($collection)
    {
        $collection
            ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
            ->addMinimalPrice()
            ->addFinalPrice()
            ->addTaxPercents()
            ->addUrlRewrite($this->getCurrentCategory()->getId())
            ->addAttributeToFilter('type_id', 'simple');

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

        return $this;
    }

これを実現するには、ローカルコード プールにモジュールを作成します。ファイルで、次のノードをノードconfig.xmlに追加しますglobal

<models>
        <catalog>
            <rewrite>
                <layer>YourPackage_YourModule_Model_Rewrite_Layer</layer>
            </rewrite>
        </catalog>
</models>

モジュールで、フォルダ「Model」の下にディレクトリ「Rewrite」を追加し、その中にファイルを作成しますLayer.phpModel/Rewrite/Layer.php

class YourPackage_YourModule_Model_Rewrite_Layer extends Mage_Catalog_Model_Layer {
}

上記の関数をこのクラスに追加し、キャッシュをクリアします。

于 2013-02-01T16:07:15.287 に答える