質問

この標準的な動作ですか、それとも私は何か間違ったことをしていますか?

// in event 'catalog_product_collection_load_before'
get_class($observer->getCollection());
 > Mage_Catalog_Model_Resource_Product_Collection
get_class(Mage::getModel('catalog/resource_product_collection'));
 > MyStuff_Catalog_Model_Resource_Product_Collection

私たちのプラグインの1つがすでにそうしているので(BLEH)、このコードを出力するブロックの書き換えを避けようとしています。そのため、イベントを使用しています。

役に立ちましたか?

解決

全体を含めるオプションがあります Catalog/Model/Resource/Product/Collection.php に新しい方法があります app/code/local/Mage フォルダーですが、絶対に必要でない限り、それに頼ることをためらいます。

他のヒント

親コレクションを自分のブロック内に設定してみませんか?

class Company_Module_Block_Customcollection extends Mage_Catalog_Block_Product_List {

    /**
     * Set collection to Product list before Html is rendered
     */
    public function _beforeToHtml() {
        parent::setCollection(Mage::getModel('catalog/category')->setCollection()); // <- Or custom collection
        parent::_beforeToHtml();
    }
}

あなたは観察することができます controller_action_layout_load_before そして、ようなものを使用します

public function observe($observer) {
    if ($observer->getEvent()->getAction()->getFullActionName() == 'checkout_cart_index')) {
         $observer->getEvent()->getLayout()->getUpdate()->addHandle('module_block');
    }
}

誰かがそれを間違っていて、それを始めたように聞こえます new 工場の方法の代わりに getSingleton()getModel() モジュールでこれを修正する方法はありません。

したがって、正しいクラスを持ちたい場合は、 new

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top