Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Отнять скидку зарег. пользователя от суммы которую видит гость.

Автор webtrendРаздел Шаблоны XSLT

Ответов: 0
Просмотров: 177
Последний ответ 30 Января 2017, 12:11:20
от webtrend
Не суммировать скидку на товар с общей скидкой от суммы заказа

Автор smartwebРаздел Шаблоны TPL

Ответов: 3
Просмотров: 445
Последний ответ 19 Декабря 2016, 12:29:09
от aghigay
Не выводится содержание корзины зарегистрированному пользователю

Автор goodprofyРаздел Шаблоны XSLT

Ответов: 3
Просмотров: 1766
Последний ответ 14 Мая 2014, 13:10:03
от admin

0 Пользователей и 1 Гость просматривают эту тему.

*

rellai

  • **
  • 58
  • +5/-0
    • Просмотр профиля
Есть следующая задача.
Клиент например нажимает  кнопку и скидка применяется.
В текущем варианте скидка применяется пользователю авторизованному.
А как применить скидку если пользователь не авторизован?
Если применять скидку гостю то ее получат все не авторизованные пользователи?
Может можно как нить сессию отслеживать?

*

ilyar

  • ***
  • 128
  • +28/-0
  • UMI.CMS, Yii, Vagrant, BEM
    • Просмотр профиля
    • ilyar на toster
Есть следующая задача.
Клиент например нажимает  кнопку и скидка применяется.
В текущем варианте скидка применяется пользователю авторизованному.
А как применить скидку если пользователь не авторизован?
Если применять скидку гостю то ее получат все не авторизованные пользователи?
Может можно как нить сессию отслеживать?

В модуле Интернет магазин есть возможность оформлять заказы гостям это реализовано за счет создания объекта "покупатель-гость" соответственно создается сессия, полагаю можно сделать кастом который будет применять скидку к этому пользователю аналогично тому как это у тебя сделано для зарегистрированных.

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
По какому критерию должна даваться скидка гостю?
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

rellai

  • **
  • 58
  • +5/-0
    • Просмотр профиля
По какому критерию должна даваться скидка гостю?
ну клиент переходит по ссылке, там обработчик и ему дается скидка на все товары.

В модуле Интернет магазин есть возможность оформлять заказы гостям это реализовано за счет создания объекта "покупатель-гость" соответственно создается сессия, полагаю можно сделать кастом который будет применять скидку к этому пользователю аналогично тому как это у тебя сделано для зарегистрированных.
а вот как узнать как прописать этого временного пользователя?

вот мой обработчик:
public function discount_all() {
 
  function get_user_id(){
    $permissions = permissionsCollection::getInstance();
    $currentUserId = $permissions->getUserId();
    return $currentUserId;
  }

$object_id = (int) getRequest('param0');
  $objects = umiObjectsCollection::getInstance();
  $objectTypes = umiObjectTypesCollection::getInstance();
  // object_id пользователя
  $user_id = get_user_id();

  $newDiscountObject = $objects->getObject(1280);
  if($newDiscountObject instanceof umiObject) {
   
    $rules_discoun_object = $objects->getObject(1283);
    $users=array();
    $object_user = $objects->getObject($user_id);
    $users = $rules_discoun_object->getValue('users');
    $users[] = $object_user;
    $users = array_unique($users);
    $rules_discoun_object->setValue('users', $users);
    $rules_discoun_object->commit();
    $newDiscountObject->commit();   
  }
  $this->redirect($this->pre_lang . "/emarket/cart/");
     
}

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Цитировать
а вот как узнать как прописать этого временного пользователя?

В обработчике можно установить флаг для сессии этого пользователя, а в скидке проверять, установлен флаг или нет. Я бы делал так.
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

rellai

  • **
  • 58
  • +5/-0
    • Просмотр профиля
А как это сделать не догоняю.
В текущем виде если пользователь не  авторизован, то перекидывает на форму авторизации

*

admin

  • *****
  • 2421
  • +172/-1
    • Просмотр профиля
А как это сделать не догоняю.
В текущем виде если пользователь не  авторизован, то перекидывает на форму авторизации

перекидывает при?
ну клиент переходит по ссылке, там обработчик и ему дается скидка на все товары.

Если да, то скорее всего не хватает прав у гостя на доступ к функции на которую вы его перекидываете, поэтому система просит его авторизоваться (правьте файл permissions.php)

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

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

*

rellai

  • **
  • 58
  • +5/-0
    • Просмотр профиля
Цитировать
Если да, то скорее всего не хватает прав у гостя на доступ к функции на которую вы его перекидываете, поэтому система просит его авторизоваться
Поправил, спасибо заработало.

Я пока не очень понимаю смысл вашей скидки по ссылке
Ссылка просто это обработчик  discount_all() она грубо говоря вызывается при определенном действии пользователя. например он нажимает кнопку получить скидку. Скрипт дергает ссылку и пользователь получает скидку.

Цитировать
еще не нажавший на вашу ссылку и тех кто гость и уже должен видеть скидку
Да, да именно в этом и загвоздка

Цитировать
А так, смотрите  предложенного выше вариант: "создавать для гостя объект "покупатель" и уже к нему привязывать факт того, что пользователю дали скидку
Вот самое главное как это сделать?... :(

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Объект создается сам при добавлении товара в корзину.
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

admin

  • *****
  • 2421
  • +172/-1
    • Просмотр профиля
Вот самое главное как это сделать?... :(

Объект создается сам при добавлении товара в корзину.

как видите половины работы почти уже сделано за вас системой (хотя надо еще проверить, а то пользователь мог еще ничего и не купить и тогда надо насильно создать этот объект "покупатель-гость")

Не знаю ваш уровень работы с umi, попробую привести общие api моменты.
1. получение объекта покупателя  (если его нет система его тут же создаст)
$customer = customer::get();

2. добавить метку что покупатель нажал на ссылку позволяющую ему видеть скидку. Если мы говорим о покупателе госте, то объект "покупатель-гость" будет работать с типом данных "Незарегистрированный покупатель" (ищите его в списке справочников, в модуле "типы данных"). В этом типе данных добавляем ему кнопку галочку "скидка доступна" которая будет проставлять при переходе пользователем по вашей ссылке.
3. пишем новое правило скидки, которое применяет скидку если у покупателя есть галочка в поле "скидка доступна" (см. статьи по поводу создания своих скидок "Скидка на товар в зависимости от количества этого товара в корзине", Скидка по карте, Добавление нового правила скидки)

*

rellai

  • **
  • 58
  • +5/-0
    • Просмотр профиля
Спасибо буду разбираться....
Как я представляю работу со скидкой у не авторизованного пользователя:
Пользователь нажимает на кнопку выполняется скрипт и как вариант в куки добавляется признак - то что скидка есть.
А дальше обработчик смотрит в куки...

Правильно думаю?

*

admin

  • *****
  • 2421
  • +172/-1
    • Просмотр профиля
можно и так, но куки имеют свои тех. ограничения, возможно разумнее сразу работать с объектом покупатель (customer)

*

rellai

  • **
  • 58
  • +5/-0
    • Просмотр профиля
<?php
class countsDiscountRule extends discountRule implements orderDiscountRule {
 
  public function validateOrder(order $order) {
    $customer = customer::get();
  $personal_discount = $customer->getValue("personal_discount");
if($personal_discount=='1'){
return true;
} else {
return false;
}
  }
};
?>

вот в таком виде скидка должна быть?

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Если поле "personal_discount" имеет тип "Флажок", то можно просто проверить if($personal_discount).

Теоретически - должно работать
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

rellai

  • **
  • 58
  • +5/-0
    • Просмотр профиля
Вот объявил эту скидку и сделал активной.
Поле параметров скидки пустое. я никаких доп полей не заводил, так как фактически она лезет в кустомер и сравнивает с 1 правильно?

Тип скидки - на заказ
Модификатор - процент от суммы
Правила валидации указал только свое.