Перейти к содержанию
Форум поддержки пользователей VamShop

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


Рекомендуемые сообщения

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

 

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

 

Ссылка на сообщение
Поделиться на другие сайты
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 выключить кэш.

Ссылка на сообщение
Поделиться на другие сайты

не все же не очень срабатывает.
не очень знаком со 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)
тоесть указать шаблону откуда данные загрузить

Ссылка на сообщение
Поделиться на другие сайты
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
Ссылка на сообщение
Поделиться на другие сайты

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

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


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 сек, и получение корзины.
с таймааутом можно игратся уже от ситуации

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

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

 

  • Like 1
Ссылка на сообщение
Поделиться на другие сайты
×
×
  • Создать...