Как очистить список сравнения?


Мне нужно, чтобы, когда пользователь перейдет на страницу списка сравнения, она сбросится, поэтому, если он снова перейдет к продуктам, ему придется выбирать разные продукты для списка.

Как я могу это сделать?

Author: Fabian Schmengler, 2013-04-23

1 answers

Вы можете использовать код, который Magento использует в clearAction() контроллера сравнения продуктов, и немного его адаптировать:

$items = Mage::getResourceModel('catalog/product_compare_item_collection');
    if (Mage::getSingleton('customer/session')->isLoggedIn()) {
        $items->setCustomerId(Mage::getSingleton('customer/session')->getCustomerId());
    } elseif ($this->_customerId) {
        $items->setCustomerId($this->_customerId);
    } else {
        $items->setVisitorId(Mage::getSingleton('log/visitor')->getId());
    }

/** @var $session Mage_Catalog_Model_Session */
$session = Mage::getSingleton('catalog/session');

try {
    $items->clear();
    Mage::helper('catalog/product_compare')->calculate(); 
}
catch (Exception $e){
    //do nothing
}

Вы можете добавить этот код в конец шаблона списка сравнения (.phtml), но чистым вариантом было бы либо переопределить блок списка (Mage_Catalog_Block_Product_Compare_List) и добавить этот код в методы _afterToHtml(), либо создать наблюдателя для события core_block_abstract_to_html_after и проверить, соответствует ли блок, переданный наблюдателю, вашему блоку (instanceof Mage_Catalog_Block_Product_Compare_List), затем выполнить приведенный выше код.

Я рекомендую переопределение блока и добавление кода в метод _afterToHtml(), потому что событие вызывается для каждого отрисованного блока, и это может привести к дополнительным затратам на отрисовку страницы.

 5
Author: Marius, 2013-04-23 09:32:47