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

 

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

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

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