Здравствуйте!
Есть следующая задача:
Нужно давать определенным клиентам 10% скидку на все товары, кроме тех товаров, которые уже имеют скидку (sale).
Думал решить так:
- создать в профиле юзера приватное поле для внесения размера скидки (модуль из коробки: profile)
- делать проверку на значение этого поля, если >0 , то срабатывает механизм скидки для определенного юзера
- а вот дальше ступор, не знаю как сделать так, что бы цена товара изменялась для этого юзера. Точнее так: как изменить цену (визуально на странице товара) - это понятно, а вот, что бы эта цена передавалась и в корзину и в оформление заказа - не знаю как сделать
Была даже идея соорудить костыль на Jquery + модуль uc_varprice">http://drupal.org/project/uc_varprice]uc_varprice[/module], путем визуального скрытия поля свободной цены в которое бы внедрялось значение цены со скидкой путем нехитрых Jquery манипуляций, только вот он зараза (модуль) не сработал т.е. цену то свою можно указать, а вот в корзину она не передается почему-то.
Комментарии
Товару добавить cck-поле "Старая цена", в hook_nodeapi проверять при сохранении товара, превышает ли старая цена новую (случается, что забывают поменять при апдейте цен), в зависимости от выполнения условия добавлять или снимать термин таксономии, например "Распродажа":
1. Сразу можно выводить вьюхой товары с термином в блок/страницу/куда угодно - назвать это дело "Акции"/"Скидки"/"Выгодная покупка"
2. В Ubercart Discounts (Alternative) можно давать-не давать скидку в зависимости от того, имеет товар определенный термин или нет
3. Товарам, имеющим термин "Распродажа" можно настроить вывод каких-нибудь иконок "SALE" и т.п.
4. ....
PROFIT!
Больше спасибо за подсказку, но сложность не в назначении категории и полей для скидки, а в том, что бы передать друпалу новую цену (со скидкой) в зависимости от значения в поле профиля клиента.
Нашел приблизительное решение (в рамках уже своего модуля):
if($op == 'load'){
$item->price = $item->price - 100;
}
}
оно позволяет передавать новое значение цены друпалу (в корзину и оформление заказа). УРА!!!
НО! мне нужно сделать так, что бы размер скидки брался из поля профиля клиента. Я сделал так:
$execuser = user_load(array('uid' => $user->uid));
$userdiscount = $execuser->profile_discount;
if($op == 'load'){
$item->price = $item->price - $userdiscount;
}
}
Но, не работает передача данных из поля профиля клиента в мой модуль, хотя этот же кусок кода работает из шаблона темы.
Как это можно реализовать?
РЕШЕНО
function mydiscount_cart_item($op, &$item) {
global $user;
profile_load_profile($user);
$userdiscount = $user->profile_discount;
$percentload = $item->price/100 * $userdiscount;
$item->price = $item->price - $percentload;
}
?>