Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Поиск по каталогу (поиск товаров/объектов)

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

Ответов: 14
Просмотров: 9977
Последний ответ 26 Января 2015, 12:07:22
от Axiomateria
Изменение количества товара в списке товаров и карточке товара

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

Ответов: 2
Просмотров: 3854
Последний ответ 14 Ноября 2015, 13:52:43
от bepluy
Импортировать "Опционные свойтва" товаров в UMIDump из CML 2.0. Хэлп!

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

Ответов: 3
Просмотров: 5623
Последний ответ 09 Февраля 2012, 13:08:00
от admin
Добавление тегов для товаров, и вывод блока с тегами в любом месте сайта

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

Ответов: 9
Просмотров: 8206
Последний ответ 26 Июля 2014, 10:58:09
от FelixTheCat
фильтр товаров с условием OR и поиск по нескольким (не всем) разделам каталога

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

Ответов: 3
Просмотров: 7288
Последний ответ 18 Мая 2012, 11:08:37
от web-industry

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

*

crazygeorgio

  • ***
  • 140
  • +7/-0
    • Просмотр профиля
Цены товаров зависят от региона, выбранного на сайте! Однако, при добавлении товара в корзину и при дальнейшем изменении региона цены в корзине не пересчитываются. Написан метод, вызываю его при смене региона, вроде работает. Суть в том, что беру корзину, перебираю в ней товары, удаляю их и добавляю заново... может можно как-то и иначе?

public function basketRefresh() {
$order = $this->getBasketOrder();
$orderItems = $order->getItems();
if (count($orderItems) == 0) return false;

foreach($orderItems as $orderItem) {

$options = $orderItem->getOptions();
$amount = $orderItem->getAmount();

$element = $orderItem->getItemElement();
$orderItem->remove();
$orderItemNew = orderItem::create($element->id);

                if ($orderItemNew instanceof optionedOrderItem) {
foreach($options as $optionName => $optionId) {
if ($optionId) {
$orderItemNew->appendOption($optionName, $optionId);
}
}
}

$orderItemNew->setAmount($amount ? $amount : 1);
$orderItemNew->refresh();
$order->appendItem($orderItemNew);
}

$order->refresh();
}

*

crazygeorgio

  • ***
  • 140
  • +7/-0
    • Просмотр профиля
никто и ничего не может сказать?

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Чисто теория:
Когда вызывается refresh() для экземпляра класса ORDER, т.е. для корзины, то и вызывается refresh() для OrderItem (товар в корзине).
Внутри OrderItem::Refresh() вызывается метод OrderItem::getItemPrice(), возвращающий стоимость товара. Вероятнее всего, туда Вы и встраивали проверку стоимости от региона.

То есть в идеале после смены региона достаточно вызвать refresh() для корзины и цены пересчитаются.

*

crazygeorgio

  • ***
  • 140
  • +7/-0
    • Просмотр профиля
я тоже так думал! но это все не работает, ни refresh для корзины, ни refresh для каждой позиции в корзине... могу только предположить что видимо метод OrderItem::getItemPrice() никак не связан с точкой вызова umiObjectProperty_loadPriceValue, по которой и подменяется цена
« Последнее редактирование: 25 Февраля 2016, 13:18:55 от crazygeorgio »

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Логичное предположение. Советую расставить какие-нибудь метки (var_dump(); отлично подходит) и убедиться в этом.

*

crazygeorgio

  • ***
  • 140
  • +7/-0
    • Просмотр профиля
да не, чего толку-то, так работает и ладно)

просто непонятно, это косяк или из каких-то других соображений было так сделано

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Да не, вроде не косяк.
Сколько раз я что-то подобное делал или копался в чужом коде - всё, что касается интернет-магазина, делалось внутри класса emarket (в терминах umi.cms - внутри модуля emarket).
Реализую подобного функционала внутри класса umiObjectProperty не встречал, но не отрицаю, что это возможно.