Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
почему не срабатывает "if test" в файле object-view.xsl

Автор AxiomateriaРаздел Шаблоны XSLT

Ответов: 2
Просмотров: 2846
Последний ответ 14 Февраля 2014, 19:09:56
от Axiomateria
Не срабатывает форма авторизации пользователя.

Автор SeweryssРаздел Настройка системы и модулей

Ответов: 5
Просмотров: 3868
Последний ответ 24 Октября 2013, 22:22:51
от admin
В IE7-IE9 не срабатывает action у формы

Автор AllaVKРаздел JS и AJAX

Ответов: 43
Просмотров: 28149
Последний ответ 26 Сентября 2012, 11:32:09
от admin
Не срабатывает кастомное собитие

Автор atachРаздел Custom макросы

Ответов: 9
Просмотров: 4474
Последний ответ 05 Сентября 2013, 15:32:04
от admin
Сортировка товаров каталога - по цене, названию, популярности

Автор manadsgnРаздел Шаблоны XSLT

Ответов: 26
Просмотров: 16810
Последний ответ 29 Декабря 2016, 19:17:07
от Axiomateria

0 Пользователей и 2 Гостей просматривают эту тему.

*

atach

  • ***
  • 165
  • +6/-0
    • Просмотр профиля
Столкнулся с такой проблемой, делал скидку по примеру статьи:
http://wiki.umisoft.ru/%D0%A1%D0%BA%D0%B8%D0%B4%D0%BA%D0%B0_%D0%BD%D0%B0_%D1%82%D0%BE%D0%B2%D0%B0%D1%80_%D0%B2_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D1%82_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D1%8D%D1%82%D0%BE%D0%B3%D0%BE_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0_%D0%B2_%D0%BA%D0%BE%D1%80%D0%B7%D0%B8%D0%BD%D0%B5

Но возникла проблема, на одном из проектов цена у товаров стоит нулевая "0", и изменяется при помощи опционных свойств.

Проблема в том что скидка не срабатывает на такие товары (у которых поле price равно "0"). Если цена стоит выше "0" и добавляются опц.свойства то всё норм.

В самом правиле речь идет только о количестве ...
<?php
class countsDiscountRule extends discountRule implements itemDiscountRule {
 
  public function validateItem(iUmiHierarchyElement $orderItem) {
 
    $itemsCount = '';
    $emarket = cmsController::getInstance()->getModule('emarket');
    if(!$emarket) return;
    //текущая корзина
    $order = $emarket->getBasketOrder();
 
    foreach($order->getItems() as $orderItemBasket) {
      $object_id = $orderItemBasket->getItemElement()->getId();
      if($object_id == $orderItem->id){
        $itemsCount = $orderItemBasket->getAmount();
      break;
      }
    }
 
    // Если кол-во товаров в корзине >= условия в скидке то возвращаем true
    if($itemsCount >= $this->counts){
      return true;
    }else{
      return false;
    }
  }
 
};
?>

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
то есть, ваш вопрос, почему система не считает скидку когда в товаре с опционными свойствами в поле "цена" стоит 0 ?

*

atach

  • ***
  • 165
  • +6/-0
    • Просмотр профиля
НЕТ он не применяет правила когда стоит 0 только в поле price (основная цена), опциональные свойства есть (применены к товару) ...
Т.е. цена формируется цена + опц.свойство ... Так вот у всех товаров стоит 0, а опц свойстов цена > 0  ...

Если стоимость товара 0, то понятно что ноль ...

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
НЕТ он не применяет правила когда стоит 0 только в поле price (основная цена), опциональные свойства есть (применены к товару) ...
Т.е. цена формируется цена + опц.свойство ... Так вот у всех товаров стоит 0, а опц свойстов цена > 0  ...

Если стоимость товара 0, то понятно что ноль ...
Это мне понятно, я не совсем понимаю какого совета вы хотите?

понять где идет проверка на то что основная цена равна 0?

*

atach

  • ***
  • 165
  • +6/-0
    • Просмотр профиля
Нет я не пойму почему не срабатывает правило?

Ведь оно должно срабатывать при условии что в корзине находится определенное количество товара одного наименования.

Возможно я не понимаю как назначаются опц.свойства и сначала идет проверка на стоиомсть товара по полю (price), а не общее с опц.свйоствами

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
а скидку вы хотите увидеть в списке товаров?(если да то как вы даете понять системе в связке с какой опцией должна выводиться скидка) или в корзине?

*

atach

  • ***
  • 165
  • +6/-0
    • Просмотр профиля
Получил только что ответ от Службы Заботы ...
Все правила скидки работают только при условии что у товара цена (в поле price) выше нуля ...

Просто я думал что правило скидки проверяет конечную цену товара, которая получается уже после манипуляциями с опц.свойствами, а оказывается нет .

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
еще раз переспрошу, вы скидку где ожидали увидеть?

*

atach

  • ***
  • 165
  • +6/-0
    • Просмотр профиля
Я ожидаю её увидеть уже при оформлении заказа (в корзине). Если Вы об этом спрашиваете. Мне не нужно показывать пересчитанный товар в каталоге.

Скидка по правилам назначается не на заказ на товар в корзине (order_items)
« Последнее редактирование: 28 Августа 2013, 15:54:27 от atach »

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
нашел связку кода, в которой видно где надо поправить, но это редактирование ядра, так что в вашем случае:
- либо логически решить вопрос по другому
- либо сделать копию нескольких функций дублирующий функциональность пересчета скидки
- либо редактировать ядро

*

atach

  • ***
  • 165
  • +6/-0
    • Просмотр профиля
т.е. это всё таки проверка в ядре что бы item_price было больше 0?

p.s. можно тогда путь до класса где идет проверка этого всёго ...
« Последнее редактирование: 28 Августа 2013, 16:13:59 от atach »

*

atach

  • ***
  • 165
  • +6/-0
    • Просмотр профиля
Вариант конечно есть (выход) ... Ставить цену 1 руб.  и к ней добавлять цену опц.свойства уменьшенную на этот же 1 рубль, тогда скидка работает ... но для клиента боюсь не очень удобно это всё

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
хм.. прописать пути.

при выводе товаров происходит refresh() (файл /classes/modules/emarket/classes/orders/orderItem.php)

там есть строчка которая определяет скидку товара в корзине
$discount = itemDiscount::search($element);

itemDiscount::search это функция search() в (файле /classes/modules/emarket/classes/discounts/discounts/itemDiscount.php)/ Вней есть тот самый блок

~~~~~~~~~~
switch(sizeof($discounts)) {
            case 0: return null;
            default:
               $elementPrice = $element->price;
               $maxDiscount = null; $minPrice = null;
               foreach($discounts as $i => $discount) {
                  $price = $discount->recalcPrice($elementPrice);
                  if($price <= 0) continue;
                  
                  if(is_null($minPrice) || $minPrice > $price) {
                     $minPrice = $price;
                     $maxDiscount = $discount;
                  }
               }
               return $maxDiscount;
         }
~~~~~~~~~~

Думаю, там он и отпадает

*

atach

  • ***
  • 165
  • +6/-0
    • Просмотр профиля
Спасибо большое ...
Буду разбираться