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

Товарищи как правильно сформировать запрос в базу данных при успешной покупке в корзине?


dsorokeen

Recommended Posts

Товарищи как правильно сформировать запрос в базу данных при успешной покупке в корзине?

 

Запрос хочу сформировать такой: Чтоб при покупке определенного товара через корзину, после успешной оплаты у клиента менялся айди его группы клиента (customer_group_id)

 

Я так понял, что мне надо catalog/mode/checkout/order, затем в функция addOrder засунуть запрос в базу где-то в низу. Но не могу корректно сформулировать его (

 

OC3. Очень благодарен буду за помощь! Всех с наступающим Новым годом!)))

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


Если в функцию addOrder добавлять то запрос будет такой (без условия на опред товар)

$group_id = 1; //Здесь id твоей новой группы в которую переводишь юсера

$this->db->query("UPDATE " . DB_PREFIX . "customer SET customer_group_id = '" . (int)$group_id . "' WHERE customer_id = '" . (int)$data['customer_id'] . "'");

добавить перед

return $order_id;

 

Змінено користувачем Venter
Надіслати
Поділитися на інших сайтах

Ну а если условие на продукт ставить, то нужно скорее всего знать product_id продукта или продуктов

Змінено користувачем Venter
Надіслати
Поділитися на інших сайтах

7 минут назад, Venter сказал:

Ну а если условие на продукт ставить, то нужно скорее всего знать product_id продукта или продуктов

у меня вот как раз основная боль с условием продукта)) айдишка товара 161

 

Код выше вставил перед и добавил нужный айди группы :)

Помоги, пожалуйста, могу на пивко скинуть даже))

return $order_id;
Надіслати
Поділитися на інших сайтах


находим вот такую строку

// Products
if (isset($data['products'])) {

перед ней ставим

$num_product = 161; //твой номер продукта по которому и дет проверка
		
$m_product = array();

далее находим строку

foreach ($data['products'] as $product) {

после нее вставляем

$m_product[] = $product['product_id'];

ну и само условие

if (in_array($num_product, $m_product)) {

    $group_id = 1; //Здесь id твоей новой группы в которую переводишь юсера

    $this->db->query("UPDATE " . DB_PREFIX . "customer SET customer_group_id = '" . (int)$group_id . "' WHERE customer_id = '" . (int)$data['customer_id'] . "'");

}

Сейчас второй вариант покажу

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

Создаем свой собственный метод

	public function my_customer_group($customer_id) {
		
		$group_id = 1; //Здесь id твоей новой группы в которую переводишь юсера
		
		$this->db->query("UPDATE " . DB_PREFIX . "customer SET customer_group_id = '" . (int)$group_id . "' WHERE customer_id = '" . (int)$customer_id . "'");

	}

как раз в том файле там где находиться метод addOrder

 

ищем вот такие строки

			foreach ($data['products'] as $product) {
				$this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET 
				order_id = '" . (int)$order_id . "', product_id = '" . (int)$product['product_id'] . "', name = '" . $this->db->escape($product['name']) . "', model = '" . $this->db->escape($product['model']) . "', quantity = '" . (int)$product['quantity'] . "', price = '" . (float)$product['price'] . "', total = '" . (float)$product['total'] . "', tax = '" . (float)$product['tax'] . "', reward = '" . (int)$product['reward'] . "'");

				$order_product_id = $this->db->getLastId();

				foreach ($product['option'] as $option) {
					$this->db->query("INSERT INTO " . DB_PREFIX . "order_option SET order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', product_option_id = '" . (int)$option['product_option_id'] . "', product_option_value_id = '" . (int)$option['product_option_value_id'] . "', name = '" . $this->db->escape($option['name']) . "', `value` = '" . $this->db->escape($option['value']) . "', `type` = '" . $this->db->escape($option['type']) . "'");
				}
			}

как раз я думаю самым нормальным будет вставить условие после строки

$order_product_id = $this->db->getLastId();

Условие

				if( $product['product_id'] == 161 ) {
					$this->my_customer_group($data['customer_id']);
				}

В итоге вот так

		// Products
		if (isset($data['products'])) {
			foreach ($data['products'] as $product) {
				$this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET 
				order_id = '" . (int)$order_id . "', product_id = '" . (int)$product['product_id'] . "', name = '" . $this->db->escape($product['name']) . "', model = '" . $this->db->escape($product['model']) . "', quantity = '" . (int)$product['quantity'] . "', price = '" . (float)$product['price'] . "', total = '" . (float)$product['total'] . "', tax = '" . (float)$product['tax'] . "', reward = '" . (int)$product['reward'] . "'");

				$order_product_id = $this->db->getLastId();
				
				if( $product['product_id'] == 161 ) {
					$this->my_customer_group($data['customer_id']);
				}

				foreach ($product['option'] as $option) {
					$this->db->query("INSERT INTO " . DB_PREFIX . "order_option SET order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', product_option_id = '" . (int)$option['product_option_id'] . "', product_option_value_id = '" . (int)$option['product_option_value_id'] . "', name = '" . $this->db->escape($option['name']) . "', `value` = '" . $this->db->escape($option['value']) . "', `type` = '" . $this->db->escape($option['type']) . "'");
				}
			}
		}

 

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

20 минут назад, Venter сказал:

Выбирай любой вариант какой нравиться )))

Вещаю тебе огромное человеческое спасибо!))
Работает!))

Надеюсь, мой уровень PHP когда-нибудь будет подобен твоему))

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


4 минуты назад, dsorokeen сказал:

Вещаю тебе огромное человеческое спасибо!))
Работает!))

Надеюсь, мой уровень PHP когда-нибудь будет подобен твоему))

рад что работает и помогло решение. второй вариант вроде как проще будет

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

7 часов назад, Venter сказал:

рад что работает и помогло решение. второй вариант вроде как проще будет

А, ещё такой момент, баг нашел, сразу человека кидает в группу 2, даже если он не оплатил товар ((

 

Куда закинуть можно данный код, так чтоб он срабатывал исключительно после успешной оплаты?))

После успешной оплаты в настройках стоит "Сделка завешена". Это order_status_id = "5" и его должно кидать в customer_group_id = "2".

 

Где-то в этом же файле catalog/mode/checkout/order.php, или поместить куда-то его в catalog/controller/checkout/success.php ?

Сорян, ситуация вынуждает еще раз попросить помочь)))

 

Я перед тем как написать конечно попытался позакидывать по разным местам, но чет не срабатывает у меня.. :(

Змінено користувачем dsorokeen
Надіслати
Поділитися на інших сайтах


18 минут назад, dsorokeen сказал:

А, ещё такой момент, баг нашел, сразу человека кидает в группу 2, даже если он не оплатил товар ((

 

Куда закинуть можно данный код, так чтоб он срабатывал исключительно после успешной оплаты?))

После успешной оплаты в настройках стоит "Сделка завешена". Это order_status_id = "5" и его должно кидать в customer_group_id = "2".

 

Где-то в этом же файле catalog/mode/checkout/order.php, или поместить куда-то его в catalog/controller/checkout/success.php ?

Сорян, ситуация вынуждает еще раз попросить помочь)))

 

Я перед тем как написать конечно попытался позакидывать по разным местам, но чет не срабатывает у меня.. :(

Ща решим )))

самому стало интересно

Змінено користувачем Venter
Надіслати
Поділитися на інших сайтах

20 минут назад, dsorokeen сказал:

А, ещё такой момент, баг нашел, сразу человека кидает в группу 2, даже если он не оплатил товар ((

Это было сразу понятно, что все будет не так.

 

20 минут назад, dsorokeen сказал:

Где-то в этом же файле catalog/mode/checkout/order.php

смотрите в сторону функции addOrderHistory

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

34 минуты назад, Bn174uk сказал:

Это было сразу понятно, что все будет не так.

 

смотрите в сторону функции addOrderHistory

Тогда опять же идем в catalog/mode/checkout/order.php

@dsorokeen  замени метод вот этим

	public function my_customer_group($customer_id) {
		
		$group_id = 2; //Здесь id твоей новой группы в которую переводишь юсера
		
		if( $customer_id > 0 ) {
		    $this->db->query("UPDATE " . DB_PREFIX . "customer SET customer_group_id = '" . (int)$group_id . "' WHERE customer_id = '" . (int)$customer_id . "'");
		}
	}

далее в методе addOrderHistory ищи строки 

// Stock subtraction
$order_products = $this->getOrderProducts($order_id);

foreach ($order_products as $order_product) {

и после ставь

if( $order_product['product_id'] == 161 ) {
	$this->my_customer_group($order_info['customer_id']);
}

извиняюсь за косяк свой, просто с лету написал то что выше первый код, но не тестил. а сейчас протестил. можно кстати еще в другое место запихать этот код

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

а вообще было бы неплохо ocmod сделать. сейчас сделаю

 

Змінено користувачем Venter
Надіслати
Поділитися на інших сайтах

@dsorokeen  если скинешь id группы покупателей я тебе скину  ocmod чтоб ты не ковырялся в коде

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

11 часов назад, Venter сказал:

@dsorokeen  если скинешь id группы покупателей я тебе скину  ocmod чтоб ты не ковырялся в коде

Уснул вчера уже))) айди группы 2
Та я могу и в коде ковырнуть, мне в кайф) Людям может кому понадобиться, можно и Ocmod)

Сейчас сяду, сделаю как ты сказал))

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


19 минут назад, dsorokeen сказал:

Уснул вчера уже))) айди группы 2
Та я могу и в коде ковырнуть, мне в кайф) Людям может кому понадобиться, можно и Ocmod)

Сейчас сяду, сделаю как ты сказал))

Вот Ocmod, тестил работает

edit-user-group.ocmod.zip

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

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

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

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

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

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

Вхід

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

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

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

Important Information

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