Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

При обновлении страницы товар опять кладется


Recommended Posts

Доброго времени суток, Господа!

 

Есть проблема: При обновлении страницы товар опять кладется.

Т.е, я кладу в корзину товар потом на той-же странице удаляю товар из мини-корзины, страница обновляется и товар опять кладется в корзину.

 

Какие могут быть соображения?

Надіслати
Поділитися на інших сайтах


При обновлении страницы выскакивает окно "Подтвердите повторную отправку формы" ? Если да - то это нормально, что кладется еще раз.
Вкратце: когда браузер загружает страницу, он дает серверу команду: "ДАЙ мне страницу по адресу такому-то". Когда вы нажимаете на кнопку "положить в корзину", браузер дает серверу команду "ПОЛОЖИ выбранный товар в корзину". 

Когда вы нажимаете на кнопку "обновить", то браузер повторяет последнюю команду к данной странице, собственно посылая еще раз команду "ПОЛОЖИ...". Это нормально, так работает интернет. 

В нашем современном мире проблема решается отправкой ajax запроса (запрос "в фоновом режиме", без перезагрузки страницы), получением ответа и изменением корзины, как собственно и реализовано из коробки в Опенкарте. Другие способы в случае с интернет-магазином - изврат.

Змінено користувачем Gorman
Надіслати
Поділитися на інших сайтах

12 часов назад, Gorman сказал:

При обновлении страницы выскакивает окно "Подтвердите повторную отправку формы" ? Если да - то это нормально, что кладется еще раз.
Вкратце: когда браузер загружает страницу, он дает серверу команду: "ДАЙ мне страницу по адресу такому-то". Когда вы нажимаете на кнопку "положить в корзину", браузер дает серверу команду "ПОЛОЖИ выбранный товар в корзину". 

Когда вы нажимаете на кнопку "обновить", то браузер повторяет последнюю команду к данной странице, собственно посылая еще раз команду "ПОЛОЖИ...". Это нормально, так работает интернет. 

В нашем современном мире проблема решается отправкой ajax запроса (запрос "в фоновом режиме", без перезагрузки страницы), получением ответа и изменением корзины, как собственно и реализовано из коробки в Опенкарте. Другие способы в случае с интернет-магазином - изврат.

Спасибо. Да, я это понимаю, что это так работает. Наверное неправильно суть описал. Больше беспокоит то, что страница обновляется когда удаляешь товар из мини-корзины. И соответственно опять кидается назад. Кажется это ненормально.

Вот код кнопки удаления:

<td class="remove"><a href="javascript:;" onclick="cart.remove('<?php echo $product['cart_id']; ?>');" title="<?php echo $button_remove; ?>"></a></td>
Надіслати
Поділитися на інших сайтах


А, теперь стало яснее.

 

Во-первых, убрать href="javascript:;" вообще, во-вторых, править  вызываемый метод remove() объекта cart (привел ниже, из Вашего common.js), там он  Вас и редиректит.
 

'remove': function(key) {
        $.ajax({
            url: 'index.php?route=checkout/cart/remove',
            type: 'post',
            data: 'key=' + key,
            dataType: 'json',
            success: function(json) {
                if (getURLVar('route') == 'checkout/cart' || getURLVar('route') == 'checkout/checkout') {
                    location = 'index.php?route=checkout/cart';
                } else {
                    $('#cart_block #cart_content').load('index.php?route=common/cart/info #cart_content_ajax');
                    $('#cart_block #total_price_ajax').load('index.php?route=common/cart/info #total_price');
                    $('#cart_block #cart_count_ajax').load('index.php?route=common/cart/info #cart_count');
                    $('#cart-total').html(json['total']);
                }
            }
        });
    }

 

Змінено користувачем Gorman
Надіслати
Поділитися на інших сайтах

  • 2 weeks later...
В 17.02.2018 в 14:25, Gorman сказал:

А, теперь стало яснее.

 

Во-первых, убрать href="javascript:;" вообще, во-вторых, править  вызываемый метод remove() объекта cart (привел ниже, из Вашего common.js), там он  Вас и редиректит.
 


'remove': function(key) {
        $.ajax({
            url: 'index.php?route=checkout/cart/remove',
            type: 'post',
            data: 'key=' + key,
            dataType: 'json',
            success: function(json) {
                if (getURLVar('route') == 'checkout/cart' || getURLVar('route') == 'checkout/checkout') {
                    location = 'index.php?route=checkout/cart';
                } else {
                    $('#cart_block #cart_content').load('index.php?route=common/cart/info #cart_content_ajax');
                    $('#cart_block #total_price_ajax').load('index.php?route=common/cart/info #total_price');
                    $('#cart_block #cart_count_ajax').load('index.php?route=common/cart/info #cart_count');
                    $('#cart-total').html(json['total']);
                }
            }
        });
    }

 

Спасибо, за ответ. Но разобраться никак не могу. Я не очень в ajax разбираюсь. Что править в этом скрипте, чтобы страница не обновлялась? Хотя бы направление дайте! ))

Надіслати
Поділитися на інших сайтах


Честно: если не понимаете что в методе написано даже примерно, то разбираться с тем, почему так работает удаление товара из корзины будете неделю в лучшем случае.

Направление - копайте в сторону метода (функции), который я описал выше. Его можно найти в common.js. "Из коробки", редиректа в разделе выбора товаров быть не должно (собственно и в функции его нет), и если зайти на чистый магаз - то все будет добавляться и удаляться асинхронно, через ajax, без перезагрузки.
У вас на сайте сделано что-то такое, что и добавление, и удаление вместо вызова (или вместе с вызовом) js-метода еще и перезагружает страницу. С наскока, без исходных файлов я не могу Вам сказать, что именно заставляет его прыгать. Нужно залазить и смотреть как и куда проходит запрос, какие ответы приходят, и в какой момент его кидает.

 

Давайте еще проще опишу. 
1. У вас есть кнопка-крестик, <a href="javascript:;" onclick="cart.remove('<?php echo $product['cart_id']; ?>');"

2. Кнопка вызывает по щелчку (onclick) функцию cart.remove (на самом деле метод remove объекта cart), которую Вы можете найти в файле common.js. Лежит он где-нибудь в catalog/view/javascript/common.js

3. Функция отрабатывает все, что в ней написано. Она отправляет запрос на удаление в контроллер (checkout/cart/remove), и если оттуда приходит ответ, что все сделано, то:

4. Принимает решение что с этим ответом сделать. Функция смотрит на роут (на урл), и если мы находимся в корзине или на этапе оформления товара, то она перезагружает страницу (и показывает новую корзину). Если мы находимся где-то в другом месте, то она просто обновляет эту мини-корзину, без перезагрузки страницы.


Так должно работать из коробки. Что и где у вас намутили, что страницу по любому чиху перезагружается - нужно смотреть и отлавливать.

 

Змінено користувачем Gorman
Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.