GetCollection () getCollection () не переписывается
-
16-10-2019 - |
Вопрос
Это стандартное поведение, или я делаю что -то не так?
// 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
Я пытаюсь избежать переписывания блока, который выводит этот код, так как один из наших плагинов уже делает это (Bleh), поэтому я использую это событие.
Решение
Есть возможность включить весь Catalog/Model/Resource/Product/Collection.php
с моими новыми методами в app/code/local/Mage
Папка, но я не решаюсь прибегать к этому, если это не абсолютно необходимо.
Другие советы
Почему бы не установить родительскую коллекцию в своем собственном блоке?
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();
}
}
Вы можете наблюдать controller_action_layout_load_before
И используйте что -то вроде
public function observe($observer) {
if ($observer->getEvent()->getAction()->getFullActionName() == 'checkout_cart_index')) {
$observer->getEvent()->getLayout()->getUpdate()->addHandle('module_block');
}
}
Похоже, кто -то сделал это неправильно и информировал с new
вместо фабричных методов getSingleton()
а также getModel()
В вашем модуле нет способа исправить это.
Поэтому, если вы хотите провести правильный класс, вы должны изменить модуль, который использует new