Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


dsorokeen
 Share

Recommended Posts

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

 

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

 

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

 

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

Link to comment
Share on other sites


Если в функцию 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;

 

Edited by Venter
Link to comment
Share on other sites

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

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

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

 

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

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

return $order_id;
Link to comment
Share on other sites


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

// 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'] . "'");

}

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

Link to comment
Share on other sites

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

	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']) . "'");
				}
			}
		}

 

Link to comment
Share on other sites

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

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

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

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

Link to comment
Share on other sites


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

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

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

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

Link to comment
Share on other sites

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

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

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

 

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

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

 

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

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

 

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

Edited by dsorokeen
Link to comment
Share on other sites


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

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

 

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

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

 

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

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

 

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

Ща решим )))

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

Edited by Venter
Link to comment
Share on other sites

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

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

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

 

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

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

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

Link to comment
Share on other sites

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']);
}

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

Link to comment
Share on other sites

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

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

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

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

Link to comment
Share on other sites


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

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

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

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

edit-user-group.ocmod.zip

  • +1 1
Link to comment
Share on other sites

В 28.12.2020 в 11:58, Venter сказал:

Ну че рилииет?

Да, всё четенько рилииет!) Спасипотому что) С Новым годом тебя, здоровья и благополулия)

  • +1 1
Link to comment
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
 Share

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