Question

Est-ce comportement standard, ou que je fais quelque chose de mal?

// 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

Je suis en train de réécrire le bloc d'éviter que les sorties de ce code, puisque l'un de nos plugins fait déjà (bleh), de sorte que ce pourquoi je me sers de l'événement.

Était-ce utile?

La solution

Il y a la possibilité d'inclure l'ensemble Catalog/Model/Resource/Product/Collection.php avec mes nouvelles méthodes dans le dossier app/code/local/Mage, mais je suis hésité à recourir à ce à moins qu'il ne soit absolument nécessaire.

Autres conseils

Pourquoi ne pas la collection parent dans votre propre bloc?

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();
    }
}

Vous pouvez observer quelque chose controller_action_layout_load_before et l'utilisation comme

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

On dirait que quelqu'un a fait mal et instancié avec new au lieu des méthodes d'usine getSingleton() et getModel() il n'y a pas moyen de résoudre ce problème dans votre module.

Donc, si vous voulez avoir la classe correcte, vous devez changer le module qui utilise le new

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top