Добавление нового правила скидки — различия между версиями
VITL' (обсуждение | вклад) |
Vitaliks (обсуждение | вклад) |
||
(не показано 7 промежуточных версий 4 участников) | |||
Строка 1: | Строка 1: | ||
+ | '''Актуально для версии 20.''' | ||
+ | |||
+ | == Задача == | ||
+ | |||
+ | Добавить новое правило скидок | ||
+ | |||
+ | == Решение == | ||
+ | |||
В данной статье будет рассказано о том, как добавить новое правило скидки для товаров. Для примера будет рассмотрен вариант добавления скидки, которая будет применяться к товару только в том случае, если он находится в определенном разделе и относится к определенному производителю. | В данной статье будет рассказано о том, как добавить новое правило скидки для товаров. Для примера будет рассмотрен вариант добавления скидки, которая будет применяться к товару только в том случае, если он находится в определенном разделе и относится к определенному производителю. | ||
Строка 5: | Строка 13: | ||
Откроем содержание справочника «Типы правил для скидок», добавим еще один элемент, с названием «На раздел и производителя», Идентификатор – brand, Тип данных – 1062, Допустимые типы скидки - На товары каталога. | Откроем содержание справочника «Типы правил для скидок», добавим еще один элемент, с названием «На раздел и производителя», Идентификатор – brand, Тип данных – 1062, Допустимые типы скидки - На товары каталога. | ||
− | Далее в папку ''' | + | Далее в папку '''/classes/components/emarket/classes/discounts/rules/''' добавим файл '''brand.php''', со следующим содержанием: |
<source lang="php"> | <source lang="php"> | ||
<?php | <?php | ||
Строка 17: | Строка 25: | ||
// справа, proizvoditel - идентификатор поля у товара | // справа, proizvoditel - идентификатор поля у товара | ||
if($this->proizvoditel == $orderItem->proizvoditel){ | if($this->proizvoditel == $orderItem->proizvoditel){ | ||
− | + | ||
+ | foreach($this->razdely as $catalogItem) { | ||
if($catalogItem->id == $orderItem->getParentId()) { | if($catalogItem->id == $orderItem->getParentId()) { | ||
return true; | return true; | ||
Строка 40: | Строка 49: | ||
«Раздел» должен быть прямым родителям для объекта каталога, т.е. указание промежуточного раздела, в котором есть подразделы, в данном случае не сработает. | «Раздел» должен быть прямым родителям для объекта каталога, т.е. указание промежуточного раздела, в котором есть подразделы, в данном случае не сработает. | ||
+ | [[Категория:Модуль Интернет магазин]] |
Текущая версия на 08:45, 25 мая 2019
Актуально для версии 20.
Задача
Добавить новое правило скидок
Решение
В данной статье будет рассказано о том, как добавить новое правило скидки для товаров. Для примера будет рассмотрен вариант добавления скидки, которая будет применяться к товару только в том случае, если он находится в определенном разделе и относится к определенному производителю.
Допустим, у товаров есть поле Производитель, типа выпадающий список, идентификатор поля 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;
}
};
?>
Теперь остается добавить саму скидку. В модуле Интернет-магазин, вкладка «Скидки», добавляем скидку:
- Тип скидки - На товары каталога
- Модификатор цены - Процент от суммы
- Правила валидации - На раздел и производителя
Указываем необходимые параметры скидки:
- Процент скидки
- Разделы
- Производитель
«Раздел» должен быть прямым родителям для объекта каталога, т.е. указание промежуточного раздела, в котором есть подразделы, в данном случае не сработает.