Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

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


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',

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

Link to post
Share on other sites

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

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

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

Link to post
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
  • Recently Browsing   0 members

    No registered users viewing this page.

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