xaker01 0 Опубликовано 6 декабря, 2019 Жалоба Share Опубликовано 6 декабря, 2019 У движка или smarty слишком сильное влияние кеша. На главной корзина всегда пустая пишет ( хотя пользователь что то добавлял в корзину) При добавление в корзину возвращается данные о состояние корзины в пред момент. Тоесть Нажал купить, ajax отправил запрос на добавление товара потом как вижу выполняется $this->Smarty->display("{flash_message}{shopping_cart template='cart-content-box'}"); но если 1 нажатие то прилетает что корзина пуста если добавить еще товар, то в корзине будет показывать пред добавленный товар как это пофиксить ? возможно это влияние и nginx+php-fpm+cloudflare Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 6 декабря, 2019 Жалоба Share Опубликовано 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 выключить кэш. Ссылка на сообщение Поделиться на другие сайты
xaker01 0 Опубликовано 6 декабря, 2019 Автор Жалоба Share Опубликовано 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) тоесть указать шаблону откуда данные загрузить Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 6 декабря, 2019 Жалоба Share Опубликовано 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 Ссылка на сообщение Поделиться на другие сайты
xaker01 0 Опубликовано 6 декабря, 2019 Автор Жалоба Share Опубликовано 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 сек, и получение корзины. с таймааутом можно игратся уже от ситуации Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 6 декабря, 2019 Жалоба Share Опубликовано 6 декабря, 2019 Спасибо, что поделились кодом. 28 минут назад, xaker01 сказал: все оказалось более простым. Добавил в FAQ Ваш совет, если кто-то из пользователей столкнётся с такой же проблемой - 1 Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения