Добавление нового правила скидки
Актуально для версии 18.
== Задача == Добавить новое правило скидок
Реализация:
В данной статье будет рассказано о том, как добавить новое правило скидки для товаров. Для примера будет рассмотрен вариант добавления скидки, которая будет применяться к товару только в том случае, если он находится в определенном разделе и относится к определенному производителю.
Допустим, у товаров есть поле Производитель, типа выпадающий список, идентификатор поля proizvoditel, справочник для поля - «Производитель». Тогда добавим дочерний тип по отношению к «Правила скидок», модуль "Шаблоны данных". Назовем новый тип «На раздел и производителя». В поле «Назначение типа» выберем «Правило скидки», добавим поле "Раздел" с типом «Ссылка на дерево», строковый идентификатор 'razdely'. Также добавим поле "Производитель", с типом выпадающий список, а справочник укажем такой же как и для товаров, т.е. «Производитель». Будем считать, что новый тип данных имеет object_id = 1062.
Откроем содержание справочника «Типы правил для скидок», добавим еще один элемент, с названием «На раздел и производителя», Идентификатор – brand, Тип данных – 1062, Допустимые типы скидки - На товары каталога.
Далее в папку /classes/components/emarket/classes/discounts/rules/ добавим файл brand.php, со следующим содержанием:
<?php
class brandDiscountRule extends discountRule implements itemDiscountRule {
public function validateItem(iUmiHierarchyElement $orderItem) {
if(!is_array($this->razdely)) {
return false;
}
// слева, proizvoditel - идентификатор поля в Правиле скидки
// справа, proizvoditel - идентификатор поля у товара
if($this->proizvoditel == $orderItem->proizvoditel){
foreach($this->razdely as $catalogItem) {
if($catalogItem->id == $orderItem->getParentId()) {
return true;
}
}
}
return false;
}
};
?>
Теперь остается добавить саму скидку. В модуле Интернет-магазин, вкладка «Скидки», добавляем скидку:
- Тип скидки - На товары каталога
- Модификатор цены - Процент от суммы
- Правила валидации - На раздел и производителя
Указываем необходимые параметры скидки:
- Процент скидки
- Разделы
- Производитель
«Раздел» должен быть прямым родителям для объекта каталога, т.е. указание промежуточного раздела, в котором есть подразделы, в данном случае не сработает.