Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

[Решено] Помогите понять добавление товара в корзину!


zeyser

Recommended Posts

Добрый вечер! Не могу понять как товар со страницы товара попадает в корзину. Есть кнопка с id="button-cart". Есть скрипт на странице с аякс запросом на checkout/cart/add. Но мы же туда по клику передаем только опции:

$.ajax({
		url: 'index.php?route=checkout/cart/add',
		type: 'post',
		data: $('#product input[type=\'text\'], #product input[type=\'hidden\'], #product input[type=\'radio\']:checked, #product input[type=\'checkbox\']:checked, #product select, #product textarea'),
		dataType: 'json',

Как корзина понимает, что в нее попал нужный товар? Я беру по аналогии категорию и common.js Там все понятно. Там аякс запрос с product_id.

$.ajax({
			url: 'index.php?route=checkout/cart/add',
			type: 'post',
			data: 'product_id=' + product_id + '&quantity=' + (typeof(quantity) != 'undefined' ? quantity : 1),
			dataType: 'json',

Подскажите пжлст или направьте куда копать...

Надіслати
Поділитися на інших сайтах


#product input[type=\'hidden\'] содержит ID товара

Спасибо!

Но я запутываюсь еще больше. Ведь тогда смотрим дальше. Мы передали все в cart/add. Там опции засунули в $option. Из этой переменной мы id товара не доставали. Далее идет строка

$this->cart->add($this->request->post['product_id'], $quantity, $option, $recurring_id)

Тоесть через пост id мы не получили, наш id в $option. Идем в system/library/cart add и там

public function add($product_id, $quantity = 1, $option = array(), $recurring_id = 0) {
		$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "cart WHERE customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'");

		if (!$query->row['total']) {
			$this->db->query("INSERT " . DB_PREFIX . "cart SET customer_id = '" . (int)$this->customer->getId() . "', session_id = '" . $this->db->escape($this->session->getId()) . "', product_id = '" . (int)$product_id . "', recurring_id = '" . (int)$recurring_id . "', `option` = '" . $this->db->escape(json_encode($option)) . "', quantity = '" . (int)$quantity . "', date_added = NOW()");
		} else {
			$this->db->query("UPDATE " . DB_PREFIX . "cart SET quantity = (quantity + " . (int)$quantity . ") WHERE customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'");
		}
	}

Инсертим product_id = '" . (int)$product_id которого и нет-то. Где я что-то упускаю? 

Надіслати
Поділитися на інших сайтах


Всем спасибо! Разобрался. Моя проблема была в непонимании того как работает сам ajax. Когда мы отправляем данные через POST

data: $('#product input[type=\'text\'], #product input[type=\'hidden\'], #product input[type=\'radio\']:checked, #product input[type=\'checkbox\']:checked, #product select, #product textarea'),

они доступны нам под своими именами указанными в этих input-ах. Я же думал, что они только из массива option доступны. Соответственно product_id у нас приходит, так как он указан в hidden

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.