Скидка по карте — различия между версиями
Velross (обсуждение | вклад) |
Vitaliks (обсуждение | вклад) |
||
(не показано 5 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
− | + | '''Актуально для версии 19.''' | |
Задача: активировать скидку, если у пользователя есть дисконтная карта. | Задача: активировать скидку, если у пользователя есть дисконтная карта. | ||
− | Создадим новый | + | Создадим новый справочник "Скидочные карты" в модуле Шаблоны данных вкладка Справочники кнопка "Добавить справочник". <br/> |
− | [[Файл: | + | [[Файл:Screenshot_207.png]]<br/> |
− | В справочнике | + | В этом справочнике будут храниться номера дисконтных карт. Для добавления кода карты необходимо выбрать справочник и нажать кнопку "Посмотреть"<br/> |
− | [[Файл: | + | [[Файл:Screenshot_209.png]]<br/> |
− | Далее нужно создать новый тип, дочерний к типу " | + | Далее нужно создать новый тип, дочерний к типу "Правила скидок", назовем его "Скидка по карте".<br/> |
− | [[Файл: | + | |
− | В типе данных "Пользователь" необходимо добавить поле для номера дисконтной карты (пользователь сможет заполнить его в личном кабинете) | + | [[Файл:Screenshot_210.png]][[Файл:Screenshot_208.png]]<br/> |
− | При создании новой скидки выберем тип " | + | В справочник "Типы правил скидки" необходимо добавить новый элемент с именем "Скидочная карта" для которого указать: |
− | В файле /classes/modules/emarket/classes/discounts/rules/ | + | Идентификатор - discountcard, Тип данных (id) - нужно указать id созданного ранее типа данных "Скидка по карте", "Допустимые типы скидки" добавить "На заказ"<br/> |
+ | [[Файл:Screenshot_212.png]][[Файл:Screenshot_211.png]]<br/> | ||
+ | В типе данных "Пользователь" необходимо добавить поле для номера дисконтной карты (пользователь сможет заполнить его в личном кабинете) в группу полей "Дополнительная информация" с идентификатором - card_discount. | ||
+ | |||
+ | При создании новой скидки выберем тип "На заказ" и в качестве правила скидки - созданное выше. | ||
+ | В файле /classes/modules/emarket/classes/discounts/rules/discountcard.php (его необходимо создать) пишем следующий код: | ||
<source lang="php"> | <source lang="php"> | ||
<?php | <?php | ||
− | class | + | class discountcardDiscountRule extends discountRule implements orderDiscountRule { |
− | + | public function validateOrder(order $order) { | |
− | + | $permissions = permissionsCollection::getInstance(); | |
− | + | $currentUserId = $permissions->getUserId(); | |
− | + | $objects = umiObjectsCollection::getInstance(); | |
− | + | $userObject = $objects->getObject($currentUserId); | |
− | + | ||
− | + | if ($userObject instanceof umiObject) { | |
− | + | $cardNum = $userObject->getValue("card_discount"); | |
− | + | $nums = new selector ('objects'); | |
− | + | $nums->types('object-type')->id('188'); | |
− | + | $nums->where('name')->equals($cardNum); | |
− | + | $res=$nums->result; | |
− | + | if (count($res)){ | |
− | + | return true; | |
− | + | } else { | |
− | + | return false; | |
− | + | } | |
} | } | ||
} | } | ||
− | + | } | |
− | + | ||
− | |||
</source> | </source> | ||
− | В данном примере | + | В данном примере 188 - это id созданного справочника "Скидочные карты" с номерами карт. |
Если номер карты, введенный пользователем в своем личном кабинете, будет найден в справочнике, то скидка активируется. | Если номер карты, введенный пользователем в своем личном кабинете, будет найден в справочнике, то скидка активируется. | ||
+ | |||
+ | Похожим образом можно реализовать скидку использующую промокод вместо карты. | ||
[[Категория:Модуль Интернет магазин]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]] | [[Категория:Модуль Интернет магазин]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]] |
Текущая версия на 06:50, 20 мая 2019
Актуально для версии 19.
Задача: активировать скидку, если у пользователя есть дисконтная карта.
Создадим новый справочник "Скидочные карты" в модуле Шаблоны данных вкладка Справочники кнопка "Добавить справочник".
В этом справочнике будут храниться номера дисконтных карт. Для добавления кода карты необходимо выбрать справочник и нажать кнопку "Посмотреть"
Далее нужно создать новый тип, дочерний к типу "Правила скидок", назовем его "Скидка по карте".
В справочник "Типы правил скидки" необходимо добавить новый элемент с именем "Скидочная карта" для которого указать:
Идентификатор - discountcard, Тип данных (id) - нужно указать id созданного ранее типа данных "Скидка по карте", "Допустимые типы скидки" добавить "На заказ"
В типе данных "Пользователь" необходимо добавить поле для номера дисконтной карты (пользователь сможет заполнить его в личном кабинете) в группу полей "Дополнительная информация" с идентификатором - card_discount.
При создании новой скидки выберем тип "На заказ" и в качестве правила скидки - созданное выше. В файле /classes/modules/emarket/classes/discounts/rules/discountcard.php (его необходимо создать) пишем следующий код:
<?php
class discountcardDiscountRule extends discountRule implements orderDiscountRule {
public function validateOrder(order $order) {
$permissions = permissionsCollection::getInstance();
$currentUserId = $permissions->getUserId();
$objects = umiObjectsCollection::getInstance();
$userObject = $objects->getObject($currentUserId);
if ($userObject instanceof umiObject) {
$cardNum = $userObject->getValue("card_discount");
$nums = new selector ('objects');
$nums->types('object-type')->id('188');
$nums->where('name')->equals($cardNum);
$res=$nums->result;
if (count($res)){
return true;
} else {
return false;
}
}
}
}
В данном примере 188 - это id созданного справочника "Скидочные карты" с номерами карт. Если номер карты, введенный пользователем в своем личном кабинете, будет найден в справочнике, то скидка активируется.
Похожим образом можно реализовать скидку использующую промокод вместо карты.