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

Обновление страницы "Корзина" без перезагрузки


Leoon

Recommended Posts

Здравствуйте! 

Никак не могу решить проблему с обновлением количества товаров на странице "Корзина" без перезагрузки страницы

Манипуляции описанные в данной теме не помогают

Как только не пытался я изменить код в контроллере, страница в любом случае перезагружается!

 

...\catalog\view\theme\default\template\checkout\cart.twig

<button type="submit"  onclick="cart.update('{{ product.cart_id }}')" ><i class="fa fa-refresh"></i></button>

...\catalog\controller\checkout\cart.php

public function edit() {
    $this->load->language('checkout/cart');
    $json = array();
    // Totals
		$this->load->model('setting/extension');
		$totals = array();
		$taxes = $this->cart->getTaxes();
		$total = 0;
		// Because __call can not keep var references so we put them into an array. 			
		$total_data = array(
		'totals' => &$totals,
		'taxes'  => &$taxes,
		'total'  => &$total
		);
    // Update
    if (is_array($this->request->post['quantity']) 
        && !empty($this->request->post['quantity'])
    ) {
        foreach ($this->request->post['quantity'] as $key => $value) {
            $this->cart->update($key, $value);
        }
        unset($this->session->data['shipping_method']);
        unset($this->session->data['shipping_methods']);
        unset($this->session->data['payment_method']);
        unset($this->session->data['payment_methods']);
        unset($this->session->data['reward']);
        $this->response->redirect($this->url->link('checkout/cart'));
    } else if (is_numeric($this->request->post['quantity'])) {
        $json['total'] = sprintf($this->language->get('text_items'), 
            $this->cart->countProducts()
                + (isset($this->session->data['vouchers'])
                    ? count($this->session->data['vouchers'])
                    : 0), 
            $this->currency->format($total, $this->session->data['currency'])
        );
    }
    $this->response->addHeader('Content-Type: application/json');       
    $this->response->setOutput(json_encode($json));
}

Кто-нибудь нашел решение? Подскажите, как с этим бороться? Хочу обновлять без перезагрузки страницы, ajax'ом

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


загляните в файл common.js и посмотрите что происходит при cart.update

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


В common.js вот что, вроде бы все правильно....

var cart = {
	'update': function(key, quantity) {
		$.ajax({
			url: 'index.php?route=checkout/cart/edit',
			type: 'post',
			data: 'key=' + key + '&quantity=' + (typeof(quantity) != 'undefined' ? quantity : 1),
			dataType: 'json',
			beforeSend: function() {
				$('#cart > button').button('loading');
			},
			complete: function() {
				$('#cart > button').button('reset');
			},
			success: function(json) {
				// Need to set timeout otherwise it wont update the total
				setTimeout(function () {
					$('#cart > button').html('<span id="cart-total"><i class="fa fa-shopping-cart"></i> ' + json['total'] + '</span>');
				}, 100);

				if (getURLVar('route') == 'checkout/cart' || getURLVar('route') == 'checkout/checkout') {
					location = 'index.php?route=checkout/cart';
				} else {
					$('#cart > ul').load('index.php?route=common/cart/info ul li');
				}
			},
			error: function(xhr, ajaxOptions, thrownError) {
				alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
			}
		});
	}
}

 

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


как минимум должно привлечь ваше внимание

if (getURLVar('route') == 'checkout/cart' || getURLVar('route') == 'checkout/checkout') {
  location = 'index.php?route=checkout/cart';
} 

ну и сабмит на кнопке

В 11.03.2018 в 21:10, Leoon сказал:

<button type="submit" onclick="cart.update('{{ product.cart_id }}')" ><i class="fa fa-refresh"></i></button>


 

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


да, действительно, уже обратил...

Переписал вот так, страница уже не перезагружается, но и цена не обновляется! Что не так делаю? 

success: function(json) {
				$('.alert-dismissible, .text-danger').remove();

				if (json['redirect']) {
					location = json['redirect'];
				}

				if (json['success']) {
					$('#content').parent().before('<div class="alert alert-success alert-dismissible"><i class="fa fa-check-circle"></i> ' + json['success'] + ' <button type="button" class="close" data-dismiss="alert">&times;</button></div>');

					// Need to set timeout otherwise it wont update the total
					setTimeout(function () {
						$('#cart > button').html('<span id="cart-total"><i class="fa fa-shopping-cart"></i> ' + json['total'] + '</span>');
					}, 100);

					$('#cart').load('index.php?route=checkout/cart #cart > *');

					$('html, body').animate({ scrollTop: 0 }, 'slow');

					$('#cart > ul').load('index.php?route=common/cart/info ul li');
				}
			}

 

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


В 13.03.2018 в 20:16, Leoon сказал:

да, действительно, уже обратил...

Переписал вот так, страница уже не перезагружается, но и цена не обновляется! Что не так делаю? 


success: function(json) {
				$('.alert-dismissible, .text-danger').remove();

				if (json['redirect']) {
					location = json['redirect'];
				}

				if (json['success']) {
					$('#content').parent().before('<div class="alert alert-success alert-dismissible"><i class="fa fa-check-circle"></i> ' + json['success'] + ' <button type="button" class="close" data-dismiss="alert">&times;</button></div>');

					// Need to set timeout otherwise it wont update the total
					setTimeout(function () {
						$('#cart > button').html('<span id="cart-total"><i class="fa fa-shopping-cart"></i> ' + json['total'] + '</span>');
					}, 100);

					$('#cart').load('index.php?route=checkout/cart #cart > *');

					$('html, body').animate({ scrollTop: 0 }, 'slow');

					$('#cart > ul').load('index.php?route=common/cart/info ul li');
				}
			}

 

Не знаю заработает ли на 3й версии, попробуй в chekout/cart.tpl в конце закинь это :

<script type="text/javascript">
$("input[name^='quantity']").change(function() {
    $("input[name^='quantity']").closest('form').submit();
});
</script>

 

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


  • 9 months later...

Заметил, что в консоле разработчика всё работает хорошо при переходе "назад" и без перезагрузки. При том, что кэш не обнуляется т.к. остаюсь в том же месте, откуда и перешёл. А подсчёт в корзине работает как и должен. Только включаю обычный режим и всё, при переходе "назад" после добавления, нужно только обновляеть страницу для правильного отображения количества в корзине. Спецы подскажите!)

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


Да не что не мешает, просто он мне не нужен. У меня и так суперсимпл сейчас) Регистрации нет. Только имя и телефон оставил для оформления заказа. Вообщем стадарт урезан, и плюс есть кое-какие доработки нужные мне по части добавления в корзину. Поэтому конфликт при установки неизбежен. Вообщем, считаю, что в нём для меня есть смысл, но только если возвращать регистрацию на сайте. И да посмотрел демо дизайн у модуля мрачный, как и стандартный, но безусловно в нём есть много полезных вещей.

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


  • 1 month later...
  • 2 months later...

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

 

Я убрал из шаблона корзины submit формы и при нажатии кнопки вызываю функцию cart.update() с ID товара и его количеством - в результате получаю ошибку "SyntaxError: Unexpected token < in JSON at position 0". Что дальше с этим делать не знаю... ((

Ну должно же быть за столько лет существования OpenCart какое-то решение такой тривиальной задачи.

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


  • 1 year later...

Тоже интересует данный вопрос - как должно быть правильно в common.js  - update

при обновлении количества - таже ошибка SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

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


  • 11 months later...
В 14.09.2020 в 12:56, RomWeb сказал:

Тоже интересует данный вопрос - как должно быть правильно в common.js  - update

при обновлении количества - таже ошибка SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

 

В 24.04.2019 в 00:08, AnWeb сказал:

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

 

Я убрал из шаблона корзины submit формы и при нажатии кнопки вызываю функцию cart.update() с ID товара и его количеством - в результате получаю ошибку "SyntaxError: Unexpected token < in JSON at position 0". Что дальше с этим делать не знаю... ((

Ну должно же быть за столько лет существования OpenCart какое-то решение такой тривиальной задачи.

Всем привет, нашел банальную реализацию этого метода. Тоже обыскался по всему интернету, толком никто ничего не говорит, всегда только плагины платные. 
По крайней мере поделюсь как у меня получилось это реализовать на 3 версии. 
Была задача, чтобы в модальном окне по нажатию на кнопки + и - редактировалось количество товаров без перезагрузки страницы. Как и у вас, функция update не работает, только выдает ошибку. 
Решение оказалось очень простым: ставим и на + и на - функцию добавления товара в корзину cart.add('product_id', количество); Где количество для + это 1, а для - это -1
Если есть желание реализовать чтобы при изменении в input происходило изменения то там тоже сделать не сложно, я по крайней мере себе не делал, адача не стояла, но наработки есть. Рад если кому то помог мой ответ. 

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


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

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

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

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

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

Вхід

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

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

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