Jump to content

Уменьшить влияния кеша


Recommended Posts

У движка или smarty слишком сильное влияние кеша.
На главной корзина всегда пустая пишет   ( хотя пользователь что то добавлял в корзину)
При добавление в корзину возвращается данные о состояние корзины в пред момент.
Тоесть
Нажал купить, ajax отправил запрос на добавление товара
потом как вижу  выполняется
$this->Smarty->display("{flash_message}{shopping_cart template='cart-content-box'}");
но если 1 нажатие то прилетает что корзина пуста
если добавить еще товар, то в корзине будет показывать пред добавленный товар

 

как это пофиксить  ?
возможно это влияние и  nginx+php-fpm+cloudflare

 

Link to post
Share on other sites
4 часа назад, xaker01 сказал:

У движка или smarty слишком сильное влияние кеша.
На главной корзина всегда пустая пишет   ( хотя пользователь что то добавлял в корзину)
При добавление в корзину возвращается данные о состояние корзины в пред момент.
Тоесть
Нажал купить, ajax отправил запрос на добавление товара
потом как вижу  выполняется
$this->Smarty->display("{flash_message}{shopping_cart template='cart-content-box'}");
но если 1 нажатие то прилетает что корзина пуста
если добавить еще товар, то в корзине будет показывать пред добавленный товар

 

как это пофиксить  ?
возможно это влияние и  nginx+php-fpm+cloudflare

 

Вообще корзина не кешируется.

Проверьте http://demo2.vamshop.ru

Можете отключить кэш в принципе.

Попробуйте в /app/comfig/core.php поменять:

	//Configure::write('Cache.disable', true);

на:

	Configure::write('Cache.disable', true);

 

Возможно и влияние cloudflare, там же в опциях по умолчанию включается кэширование.

Можно ради эксеримента в настройках cloudflare выключить кэш.

Link to post
Share on other sites

не все же не очень срабатывает.
не очень знаком со smarty 
но по документации всегда путь и данные надо писать вроде.
Коротко хотелось бы узнать 


$this->Smarty->display("{flash_message}{shopping_cart template='cart-content-box'}")

как оно срабатывает на бэеке, откуда шаблон cart-content-box,  знает откуда ему данные получить, или на каком этапе это происходить.
трассировка как то не дало понимания...
можно ли как то иначе это сделать ? 

на беке типо
$orders=получить товары корзины из бд; 
а далее
$this->Smarty->display("{flash_message}{shopping_cart template='cart-content-box'}",$orders)
тоесть указать шаблону откуда данные загрузить

Link to post
Share on other sites
10 минут назад, xaker01 сказал:

не все же не очень срабатывает.
не очень знаком со smarty 
но по документации всегда путь и данные надо писать вроде.
Коротко хотелось бы узнать 


$this->Smarty->display("{flash_message}{shopping_cart template='cart-content-box'}")

как оно срабатывает на бэеке, откуда шаблон cart-content-box,  знает откуда ему данные получить, или на каком этапе это происходить.
трассировка как то не дало понимания...
можно ли как то иначе это сделать ? 

на беке типо
$orders=получить товары корзины из бд; 
а далее
$this->Smarty->display("{flash_message}{shopping_cart template='cart-content-box'}",$orders)
тоесть указать шаблону откуда данные загрузить

А покажите где есть с этим проблемы?!

Ссылку на сайт, к примеру.

Я не замечал именно прблем с кэшем с корзиной, кэш для метки shopping_cart специально не используется, что б как раз не кэшировалась корзина.

{shopping_cart} - это смарти метка.

А значит php код находить в /app/Catalog/function.shopping_cart.php

т.е. весь каталог построен на смарти метках.

Если что-то в каталоге надо изменить, смотрите папку /app/Catalog

В метке shopping_cart указан параметро template='cart-content-box'

Это значит, что используется свой шаблон, на стандартный.

Микро-шаблон так назеваемый, его можно уведить в Админке - Оформление - Микро-шаблоны - cart-content-box

Сам js код для работы ajax корзины в /app/webroot/js/vamshop.js

По Ajax cart можно найти блок кода.

 

Подсказки по смарти тэгам можно посмотреть в Админке - Расширения - Тэги.

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

и свой шаблон можно на основе стандартного сделать.

  • Like 1
Link to post
Share on other sites

все оказалось более простым.
видимо сервер не всегда успевал добавить товар перед тем как выдать корзину.

немного по шаманил наблюдаю. но вроде сбоев нету.
для тех у кого такая же проблема оставляю =)


vamshop,js

// Ajax cart

  function onProductFormSubmit(id, quantity) {
    var str = $("#product-form"+id).serialize();
    var action = $("#product-form"+id).attr("action");
    
      var ajaxURL='/cart/purchase_product/'+"&noCache=" + (Date.now()) + Math.random(); // ревизия кеша
    $.post(action, str, function(data) {
        url: ajaxURL
       
    });


      setTimeout(function() {
          $.ajax({
              url: '/cart/getajaxorder/'+"&noCache=" + (Date.now()) + Math.random(),
              type: 'GET',
              cache: false,
              success: function(res){

                  $("nav .navbar-toggle").trigger("click");
                  $("#shopping-cart-box").html(res);
                  $("nav .dropdown-toggle.cart").dropdown("toggle");
                 
              }
          });
      }, 2000);

  }

и создаем отдельный роутинг для получения корзины

CartController.php

public function getajaxorder(){
		$this->Smarty->display("{flash_message}{shopping_cart template='cart-content-box'}");
		die();
	}

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

Link to post
Share on other sites

Спасибо, что поделились кодом.

28 минут назад, xaker01 сказал:

все оказалось более простым.

 

Добавил в FAQ Ваш совет, если кто-то из пользователей столкнётся с такой же проблемой - 

 

  • Like 1
Link to post
Share on other sites
×
×
  • Create New...