Перейти к содержанию
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>

 

Поделиться сообщением


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

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

Поделиться сообщением


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

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

Поделиться сообщением


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

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

Поделиться сообщением


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

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

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

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

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