Как очистить список сравнения?
Мне нужно, чтобы, когда пользователь перейдет на страницу списка сравнения, она сбросится, поэтому, если он снова перейдет к продуктам, ему придется выбирать разные продукты для списка.
Как я могу это сделать?
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()
, потому что событие вызывается для каждого отрисованного блока, и это может привести к дополнительным затратам на отрисовку страницы.