Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


Leoon
 Погделиться

Рекомендованные сообещёния

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

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

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

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

 

...\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 месяэтов спустя...

Всем привет! Подскажите кто всё-ики реализовал решение корзины без перезагрузки в opencart 3x на гдефолте ? И как?)

Ссылка на комменирий
Погделиться на других сайих


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

Ссылка на комменирий
Погделиться на других сайих


А что мешает приобрести модуль simple ????

Ссылка на комменирий
Погделиться на других сайих

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

Ссылка на комменирий
Погделиться на других сайих


  • 1 месяц спустя...
В 21.12.2018 в 16:54, legioner26 сказал:

А что мешает приобрести модуль simple ????

а разве он меняет страницу просмотра корзины?

Ссылка на комменирий
Погделиться на других сайих


  • 2 месяца спустя...

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

 

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

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

Ссылка на комменирий
Погделиться на других сайих


  • 1 год спустя...

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

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

Ссылка на комменирий
Погделиться на других сайих


  • 11 месяэтов спустя...
В 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 происходило изменения то им тоже сгделать не сложно, я по крайней мере себе не гделал, адача не стояла, но нарилитки есть. Рад если кому то помог мой ответ. 

Ссылка на комменирий
Погделиться на других сайих


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы осивить комменирий

Создать аккаунт

Зарегистрируйтесь для получения аккауни. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите згдесь.

Войти сейчас
 Погделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности.