makki писал(а):Доработка не сложная. Если задавать размер скидки в зависимости от суммы заказа напрямую в базе данных, а не в админке, доработка будет состоять из добавления новой таблицы в БД и пару строчек кода.
В этот раз я решил написать в Вашем стиле, без кода :)korshunov писал(а):Обычно, если надо лишь пару строк, то их просто пишут сразу - чего мелочиться-то...
makki писал(а):В этот раз я решил написать в Вашем стиле, без кода :)korshunov писал(а):Обычно, если надо лишь пару строк, то их просто пишут сразу - чего мелочиться-то...
Ничего гениального.korshunov писал(а):В цитированной вначале разработке от маркетплейса, насколько я понимаю, не считая админки, изменения в 5-6 файлах делаются. Поэтому мне удивительно и страшно интересно, как это все сократится до двух строк в гениальном решении...
Код: Выделить всё
CREATE TABLE `ok_discounts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`value` float(10,2) NOT NULL,
`min_order_price` float(10,2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Код: Выделить всё
// Пользовательская скидка
$cart->discount = 0;
if(isset($_SESSION['user_id']) && $user = $this->users->get_user(intval($_SESSION['user_id']))) {
$cart->discount = $user->discount;
}
Код: Выделить всё
// Разовая скидка от суммы заказа
$sum_discount = 0;
$this->db->query("SELECT * FROM __discounts");
foreach($this->db->results() as $discount) {
if($cart->total_price >= $discount->min_order_price) {
$sum_discount = $discount->value;
}
}
// Максимальная из скидок
$cart->discount = max ($cart->discount, $sum_discount);
Будет взята как раз максимальнаяkorshunov писал(а):1. А вот работать будет не всегда правильно. Если скидка применима к двум (или нескольким) правилам из таблицы, то будет применена из одна довольно случайная. А надо бы максимальную...
Да, будет написано просто Скидка.korshunov писал(а):2. На стр корзины и заказа будет показывать в % скидку разную при разных суммах заказа, узнать пользователю, что и почему, практически невозможно. Надо бы инфу давать покупателю - за что дана скидка.
3. В письмах о заказе то же самое - написано Скидка - и все.
При редактировании заказа в админке, в стандартном функционале скидка не подтягивается с БД по условию, а передается методом POST из заполненного поля input.korshunov писал(а):4. При корректировке заказа из админки, кажется, скидка новая уже правильно учитываться не будет - или будет?
makki писал(а): начинаете искать недостатки, поленившись проверить...
Будет взята как раз максимальная
Код: Выделить всё
// Разовая скидка от суммы заказа
$query = $this->db->placehold("SELECT value FROM __discounts WHERE min_order_price <= ? ORDER BY min_order_price DESC LIMIT 1", $cart->total_price);
$this->db->query($query);
if($sum_discount = $this->db->result('value')) {
// Максимальная из скидок
$cart->discount = max ($cart->discount, floatval($sum_discount));
}
makki писал(а):Не предполагал даже, что можно назначать большую скидку за меньшую сумму заказа.
Ну если так, то да, нужно ORDER BY value, только без DESC
makki писал(а):DESC сортировка по убыванию. Первым будет максимальная скидка, а нам надо минимальную
korshunov писал(а):Для случая
`value`, `min_order_price`
3 5000
5 3000
не будет минимальная скидка при заказе на сумму 8000.
Вернуться в «Вопросы по работе с OkayCMS»
Сейчас этот раздел просматривают: 13 гостей