Добавление нового правила скидки

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 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;
		}
	};
?>

Теперь остается добавить саму скидку. В модуле Интернет-магазин, вкладка «Скидки», добавляем скидку:

  • Тип скидки - На товары каталога
  • Модификатор цены - Процент от суммы
  • Правила валидации - На раздел и производителя

Указываем необходимые параметры скидки:

  • Процент скидки
  • Разделы
  • Производитель

«Раздел» должен быть прямым родителям для объекта каталога, т.е. указание промежуточного раздела, в котором есть подразделы, в данном случае не сработает.