xaker01 0 Posted December 6, 2019 Report Share Posted December 6, 2019 У движка или 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
support 447 Posted December 6, 2019 Report Share Posted December 6, 2019 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
xaker01 0 Posted December 6, 2019 Author Report Share Posted December 6, 2019 не все же не очень срабатывает. не очень знаком со 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
support 447 Posted December 6, 2019 Report Share Posted December 6, 2019 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 можно найти блок кода. Подсказки по смарти тэгам можно посмотреть в Админке - Расширения - Тэги. Там и описание параметров, которые можно указывать, и что это за метка, для чего используется. и свой шаблон можно на основе стандартного сделать. 1 Link to post Share on other sites
xaker01 0 Posted December 6, 2019 Author Report Share Posted December 6, 2019 все оказалось более простым. видимо сервер не всегда успевал добавить товар перед тем как выдать корзину. немного по шаманил наблюдаю. но вроде сбоев нету. для тех у кого такая же проблема оставляю =) 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
support 447 Posted December 6, 2019 Report Share Posted December 6, 2019 Спасибо, что поделились кодом. 28 минут назад, xaker01 сказал: все оказалось более простым. Добавил в FAQ Ваш совет, если кто-то из пользователей столкнётся с такой же проблемой - 1 Link to post Share on other sites
Recommended Posts