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

Включение скидки от суммы заказа


andrey231983

Recommended Posts

Всем доброго дня! Очень нужна помощь разбирающегося человека, для помощи в Opencart 2.x:

На данном форуме нашел любезно предоставленный пользователем bmite бесплатный код, который решает вопрос по "включению определенной скидки товара, в зависимости от общей суммы заказа" (в его варианте от 3000 руб.). Однако, в нем есть одна недоработка (для меня): если скидок у товара несколько, то код выбирает самую минимальную цену... а мне необходимо, чтобы он выбирал цену "по приоритету" или по увеличению "кол-ва товара" в условиях скидки. Например:

 

от 3000 руб. - первая скидка

от 5000 руб. - вторая скидка

от 10000 руб. - третья скидка

и т.д.

 

в файле system/library/cart.php

заменить код в блоке // Product Discounts на вот этот:

				// Product Discounts
				$discount_quantity = 0;

				$cart_2_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "cart WHERE customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "'");
				
				// Блок по кастомным скидкам
				$tmp_price = 0;
				foreach ($cart_2_query->rows as $prod) {
					$objProduct = $this->db->query("SELECT * FROM " . DB_PREFIX . "product WHERE product_id = " . (int)$prod['product_id']);
					$tmp_price += $objProduct->row['price'] * $prod['quantity'];
				}
				// Конец блока по кастомным скидкам

				// Блок по кастомным скидкам
				if ($tmp_price >= 3000) { // условие по кастомным скидкам
					$product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$cart['product_id'] . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1");

					if ($product_discount_query->num_rows) {
						$price = $product_discount_query->row['price'];
					}
				} // Конец блока по кастомным скидкам

https://opencartforum.com/topic/117682-resheno-vklyuchenie-skidki-ot-summy-zakaza/?tab=comments#comment-1136198

 

Пока что, я додумался только до совсем кривого варианта:

1. Первая скидка активируется от 3000 руб. сортировкой по возрастанию кол-ва заказываемого товара:

$product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$cart['product_id'] . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity ASC LIMIT 1");

 

2. Вторая скидка активируется от 5000 руб. сортировкой по установленному приоритету (для этого в товаре ставлю второй скидке приоритет "1", первой "0", третьей "0"):

$product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$cart['product_id'] . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY priority DESC LIMIT 1");

 

3. Третья скидка активируется от 10000 руб. обратной сортировкой по возрастанию кол-ва заказываемого товара:

$product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$cart['product_id'] . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC LIMIT 1");

 

 

А вот как правильно добавить сюда промежуточные варианты скидок?

 

Автор кода, к сожалению, занят и не смог мне помочь с решением моей задачи, и его ветка закрыта для сообщений, поэтому, я очень надеюсь, он не обидится на меня за размещение здесь его кода. А я сам, методом тыка, не смог достичь "правильного" результата. Поэтому, вынужден обратиться за помощью к сообществу данного форума: если кто-то сможет помочь, то буду очень признателен. Заранее премного благодарен всем, кто откликнется!

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


@Vetroff, к сожалению данный готовый модуль, как и множество других, которые я рассматривал, пока искал решение - не подходит. Необходимо активировать определенную скидку (выраженную статическим числом, а не процентной скидкой) при определенной сумме заказа в корзине. Найденный мною код - наиболее простое и понятное решение, которое просто нужно немного допилить. Я дизайнер и в программировании полный ноль, поэтому не могу сам разобраться...

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


3 минуты назад, andrey231983 сказал:

прочитайте внимательно мое задание: необходима активировать определенную скидку (выраженную статическим числом, а не процентной скидкой) 

 

о статическом числе нет ни слова вашем "задании".

 

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

Найденный мною код - наиболее простое и понятное решение, которое просто нужно немного допилить

 

Удачи )

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

@Vetroff , извините, я наверное, действительно, не совсем точно указал задание. Если бы все было просто, то я бы с удовольствием прикупил и воспользовался многочисленными модулями "Скидка от суммы заказа", в том числе и предложенным вами. Но они не выполняют мою задачу... Спасибо большое за участие.

 

Задача в следующем: в указанный выше код необходимо добавить взаимосвязь общей суммы заказа и конкретной скидки товара - по приоритету, или еще лучше - по увеличению кол-ва товара. Т.е.:

 

при заказе от 3000 руб. - первая скидка (например от 10 шт. или с приоритетом 1)

при заказе от 5000 руб. - вторая скидка (например от 20 шт. или с приоритетом 2)

при заказе от 10000 руб. - третья скидка (например от 30 шт. или с приоритетом 3)

и т.д.

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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