[Решено] Вопрос на засыпку по скидкам в ubercart

Главные вкладки

Аватар пользователя fit fit 28 ноября 2012 в 0:10

Здравствуйте!
Есть следующая задача:
Нужно давать определенным клиентам 10% скидку на все товары, кроме тех товаров, которые уже имеют скидку (sale).

Думал решить так:

  • создать в профиле юзера приватное поле для внесения размера скидки (модуль из коробки: profile)
  • делать проверку на значение этого поля, если >0 , то срабатывает механизм скидки для определенного юзера
  • а вот дальше ступор, не знаю как сделать так, что бы цена товара изменялась для этого юзера. Точнее так: как изменить цену (визуально на странице товара) - это понятно, а вот, что бы эта цена передавалась и в корзину и в оформление заказа - не знаю как сделать

Была даже идея соорудить костыль на Jquery + модуль uc_varprice">http://drupal.org/project/uc_varprice]uc_varprice[/module], путем визуального скрытия поля свободной цены в которое бы внедрялось значение цены со скидкой путем нехитрых Jquery манипуляций, только вот он зараза (модуль) не сработал т.е. цену то свою можно указать, а вот в корзину она не передается почему-то.

Комментарии

Аватар пользователя Andruxa Andruxa 28 ноября 2012 в 1:27

Товару добавить cck-поле "Старая цена", в hook_nodeapi проверять при сохранении товара, превышает ли старая цена новую (случается, что забывают поменять при апдейте цен), в зависимости от выполнения условия добавлять или снимать термин таксономии, например "Распродажа":

1. Сразу можно выводить вьюхой товары с термином в блок/страницу/куда угодно - назвать это дело "Акции"/"Скидки"/"Выгодная покупка"
2. В Ubercart Discounts (Alternative) можно давать-не давать скидку в зависимости от того, имеет товар определенный термин или нет
3. Товарам, имеющим термин "Распродажа" можно настроить вывод каких-нибудь иконок "SALE" и т.п.
4. ....
PROFIT!

Аватар пользователя fit fit 3 декабря 2012 в 14:51

Andruxa wrote:
Товару добавить cck-поле "Старая цена", в hook_nodeapi проверять при сохранении товара, превышает ли старая цена новую (случается, что забывают поменять при апдейте цен), в зависимости от выполнения условия добавлять или снимать термин таксономии, например "Распродажа":

1. Сразу можно выводить вьюхой товары с термином в блок/страницу/куда угодно - назвать это дело "Акции"/"Скидки"/"Выгодная покупка"
2. В Ubercart Discounts (Alternative) можно давать-не давать скидку в зависимости от того, имеет товар определенный термин или нет
3. Товарам, имеющим термин "Распродажа" можно настроить вывод каких-нибудь иконок "SALE" и т.п.
4. ....
PROFIT!

Больше спасибо за подсказку, но сложность не в назначении категории и полей для скидки, а в том, что бы передать друпалу новую цену (со скидкой) в зависимости от значения в поле профиля клиента.

Нашел приблизительное решение (в рамках уже своего модуля):

function mydiscount_cart_item($op, &$item) {
if($op == 'load'){
$item->price = $item->price - 100;
}
}

оно позволяет передавать новое значение цены друпалу (в корзину и оформление заказа). УРА!!!
НО! мне нужно сделать так, что бы размер скидки брался из поля профиля клиента. Я сделал так:

function mydiscount_cart_item($op, &$item) {

$execuser = user_load(array('uid' => $user->uid));
$userdiscount = $execuser->profile_discount;

if($op == 'load'){
$item->price = $item->price - $userdiscount;
}
}

Но, не работает передача данных из поля профиля клиента в мой модуль, хотя этот же кусок кода работает из шаблона темы.
Как это можно реализовать?