Jump to content
Sign in to follow this  
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',

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

#product input[type=\'hidden\']  - его имя  это product_id, а значение это айди товара

Share this post


Link to post
Share on other sites

#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 которого и нет-то. Где я что-то упускаю? 

Share this post


Link to post
Share on other sites

Всем спасибо! Разобрался. Моя проблема была в непонимании того как работает сам 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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

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.