getCollection de l'observateur () ne pas être réécrite
-
16-10-2019 - |
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.
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