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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top