Добавление нового правила скидки — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показано 7 промежуточных версий 4 участников)
Строка 1: Строка 1:
 +
'''Актуально для версии 20.'''
 +
 +
== Задача ==
 +
 +
Добавить новое правило скидок
 +
 +
== Решение ==
 +
 
В данной статье будет рассказано о том, как добавить новое правило скидки для товаров. Для примера будет рассмотрен вариант добавления скидки, которая будет применяться к товару только в том случае, если он находится в определенном разделе и относится к определенному производителю.
 
В данной статье будет рассказано о том, как добавить новое правило скидки для товаров. Для примера будет рассмотрен вариант добавления скидки, которая будет применяться к товару только в том случае, если он находится в определенном разделе и относится к определенному производителю.
  
Строка 5: Строка 13:
 
Откроем содержание справочника «Типы правил для скидок», добавим еще один элемент, с названием «На раздел и производителя»,  Идентификатор – brand, Тип данных – 1062, Допустимые типы скидки - На товары каталога.
 
Откроем содержание справочника «Типы правил для скидок», добавим еще один элемент, с названием «На раздел и производителя»,  Идентификатор – brand, Тип данных – 1062, Допустимые типы скидки - На товары каталога.
  
Далее в папку '''\classes\modules\emarket\classes\discounts\rules\''' добавим файл '''brand.php''', со следующим содержанием:
+
Далее в папку '''/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) {
+
                           
 +
      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;
		}
	};
?>

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

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

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

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

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