Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

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


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'ом

Link to post
Share on other sites

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

Link to post
Share on other sites

В 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);
			}
		});
	}
}

 

Edited by Leoon
Link to post
Share on other sites

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

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>


 

Link to post
Share on other sites

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

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

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');
				}
			}

 

Link to post
Share on other sites

В 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>

 

Link to post
Share on other sites

  • 9 months later...

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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

Link to post
Share on other sites

  • 1 month later...
В 21.12.2018 в 16:54, legioner26 сказал:

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

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

Link to post
Share on other sites

  • 2 months later...

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

 

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

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

Link to post
Share on other sites

  • 1 year later...

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

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

Link to post
Share on other sites

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

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.