getCollection del observador () no siendo reescrito
-
16-10-2019 - |
Pregunta
¿Es este comportamiento estándar, o estoy haciendo algo 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
Estoy tratando de evitar volver a escribir el bloque que da salida a este código, ya que uno de nuestros plugins ya lo haga (bleh), de modo que por eso estoy utilizando el evento.
Solución
Existe la opción de incluir toda la Catalog/Model/Resource/Product/Collection.php
con mis nuevos métodos en la carpeta app/code/local/Mage
, pero estoy reacios a recurrir a eso, a menos que sea absolutamente necesario.
Otros consejos
¿Por qué no establecer la colección de los padres dentro de su propio bloque?
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();
}
}
Se puede observar controller_action_layout_load_before
y usar algo como
public function observe($observer) {
if ($observer->getEvent()->getAction()->getFullActionName() == 'checkout_cart_index')) {
$observer->getEvent()->getLayout()->getUpdate()->addHandle('module_block');
}
}
Parece que alguien hizo mal y instanciado con new
en lugar de la getSingleton()
métodos de fábrica y getModel()
no hay manera de solucionar este problema en el módulo.
Así que si usted quiere tener la clase correcta, usted tiene que cambiar el módulo que utiliza el new