Sign in to follow this  
xaker01

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

Recommended Posts

xaker01

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

 

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

 

Share this post


Link to post
Share on other sites
support
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 выключить кэш.

Share this post


Link to post
Share on other sites
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)
тоесть указать шаблону откуда данные загрузить

Share this post


Link to post
Share on other sites
support
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

Share this post


Link to post
Share on other sites
xaker01

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

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


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

Share this post


Link to post
Share on other sites
support

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

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

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

 

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

 

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this