Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


 Share

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 comment
Share on other sites


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

Link to comment
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 comment
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 comment
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 comment
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 comment
Share on other sites


  • 9 months later...

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

Link to comment
Share on other sites


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

Link to comment
Share on other sites


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

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

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

Link to comment
Share on other sites


  • 2 months later...

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

 

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

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

Link to comment
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 comment
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 comment
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
 Share

×
×
  • 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.