Я использую неизвестный самописный модуль, и при включенном кэшировании блок этого модуля не обновляется. Что я делаю не так?

[16 июля 2019 г.]    Российская сборка Magento 2.52.2
Magento 2: модули и услуги
magereport.com: составление перечня необходимых для установки заплаток SUPEE
#1 Павел_ололо
  • Группа: Пользователь
  • Сообщений: 11
  • Регистрация: 10.04.2012

24.07.2012 09:42

Добрый день! Подскажите пожалуйста решение проблемы?
Сайт
http://многотехники.рф/
.
Сама проблема в следующем: после добавления товаров в корзину, magento не обновляет кэш у блоков корзины, новых товаров, спец предложений( на главной странице) и выдает закешированное количество товаров, после оформления заказа не сбрасывает количество товаров в корзине в 0.
Вся работа с корзиной происходит на ajax, модуль самописный.
Если отключать в админке кэширование для Blocks HTML output, то все работает.
Как можно решить проблему без отключения кэширования?

Вот код метода контролера добавления товара в корзину

	public function addAction()
    {
 		$res = array();
  		try
 		{
	 		$res['id'] = (int) $this->getRequest()->getParam('id');	 		
			$cart = Mage::getModel('checkout/cart');
			$product = Mage::getModel('catalog/product')->setStoreId(Mage::app()->getStore()->getId())->load((int)$res['id']);		
            $params = $this->getRequest()->getParams();
            $params['qty'] = 1;
            $params['product'] = $product->getId();
            $mas = array();
            
            
            foreach( $params['options'] as $key => $i )
            {
                if( $i == '' )
                    unset( $params['options'][$key] );
                else
                    if( is_array($i) )
                        foreach( $i as $j )                    
                            $mas[] = $j;
                    else
                        $mas[] = $i;                       
            }	
            $res['opt_list'] = implode(',',($mas));		
            $res['options'] = $params; 
            	    		
			$cart->addProduct($product,$params)->save();			
			$res['success'] = 1;
			$res['message'] = $product->getName().' добавлен в корзину.';
		}
		catch (Exception $e)
		{
			$res['success'] = 0;
			#echo $e->getMessage();
		}
		Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
		$res += $this->_itemhtml($res['id'] );
		return $this->getResponse()->setHeader ("content-type", "application/json")->setBody(Zend_Json::encode($res + $this->_getJSON() + $this->_messagebox($res['id'],  $res['opt_list'] ) ));   
    }



#2 Sazonio
  • Группа: Пользователь
  • Сообщений: 3
  • Регистрация: 05.07.2012

25.07.2012 15:17

1. Изучить работу этого модуля и поправить функционал.
2. Найти примеры реализации такого модуля и написать другой самостоятельно.
Очевидно, модуль недописан. А что именно недописано, тут очень сложно сказать.

#3 Павел_ололо
  • Группа: Пользователь
  • Сообщений: 11
  • Регистрация: 10.04.2012

26.07.2012 01:19

Почему то модераторы поменяли заголовок мей темы.. модуль о котором идет речь я написал самостоятельно, по примерам с разных форумов и исходников магенты

#4 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

26.07.2012 01:41

Некачественно написали.
Вам надо открыть базовый для всех экранных блоков класс Mage_Core_Block_Abstract и усвоить, как он кэширует свой внешний вид.
В частности, обратить внимание на методы toHtml, _loadCache, getCacheKey и т.п.

Поделиться темой: