Beobachters getCollection () nicht neu geschrieben werden
-
16-10-2019 - |
Frage
Ist dieses Standardverhalten oder mache ich etwas falsch?
// 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
Ich versuche zu vermeiden, den Block umzuschreiben, der diesen Code ausgibt, da eines unserer Plugins dies bereits tut (BLEH). Deshalb verwende ich das Ereignis.
Lösung
Es besteht die Möglichkeit, das gesamte einzuschließen Catalog/Model/Resource/Product/Collection.php
mit meinen neuen Methoden in der app/code/local/Mage
Ordner, aber ich zögere, darauf zurückzugreifen, es sei denn, es ist absolut notwendig.
Andere Tipps
Legen Sie die Elternsammlung in Ihrem eigenen Block ein?
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();
}
}
Sie können beobachten controller_action_layout_load_before
Und so etwas wie
public function observe($observer) {
if ($observer->getEvent()->getAction()->getFullActionName() == 'checkout_cart_index')) {
$observer->getEvent()->getLayout()->getUpdate()->addHandle('module_block');
}
}
Klingt so, als hätte es jemand falsch gemacht und mit dem Integrieren new
anstelle der Fabrikmethoden getSingleton()
und getModel()
Es gibt keine Möglichkeit, dies in Ihrem Modul zu beheben.
Wenn Sie also die richtige Klasse haben möchten, müssen Sie das Modul ändern, das das verwendet new