Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Динамическое изменение цены при выборе опционального свойства.

Автор denis_savinРаздел Шаблоны TPL

Ответов: 7
Просмотров: 8776
Последний ответ 18 Марта 2014, 18:45:34
от ilyar
Динамическое обновление цены при выборе количества товара

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

Ответов: 1
Просмотров: 5469
Последний ответ 08 Августа 2014, 00:01:13
от admin
Подскажите, пожалуйста, как вывести подсказку в зависимости от цены

Автор nitoitiРаздел Макросы UMI.CMS

Ответов: 1
Просмотров: 3756
Последний ответ 04 Ноября 2014, 19:56:24
от nitoiti
JS+AJAX - формат цены без суффикса и префикса

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

Ответов: 3
Просмотров: 4169
Последний ответ 20 Октября 2014, 00:45:31
от sam
Изменение цены в зависимости от количества товаров

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

Ответов: 4
Просмотров: 2871
Последний ответ 18 Августа 2016, 11:52:35
от aghigay

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

*

crazygeorgio

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

в папке emarket в __custom.php прописали метод

public function OnPriceValue($e)
{
$value = & $e->getRef('price');
$object_id = $e->getParam('object_id');
$object = umiObjectsCollection::getInstance()->getObject($object_id);
if ($object instanceof umiObject)
{
$price_dollar = $object->getValue('price_dollar');
$price_euro = $object->getValue('price_euro');
if ($price_dollar or $price_euro)
{
$code = $price_dollar ? 'USD' : 'EUR';
$price = $price_dollar ? $price_dollar : $price_euro;
$Currency = $this->getCurrency($code);
$defaultCurrency = $this->getDefaultCurrency();
$prices = array(
$price
);
$format = $this->formatCurrencyPrice($prices, $defaultCurrency, $Currency);
$value = round($format[0]);
/*$object->setValue('price',round($format[0]));               
$object->commit;*/             
                        }
}
else return false;
}

в custom_events.php прописали

Цитировать
<?php  new umiEventListener("umiObjectProperty_loadPriceValue", "emarket", "OnPriceValue");?>

все работает ок, но при этом если цена задана в долларах или евро, то по своей сути в базе в поле цены будет стоять НОЛЬ и таким образом не будут корректно работать фильтры по рублевой цене товаров каталога, при этом закомментченные строки в __custom.php решали бы проблему, но это слишком нагружает сайт. Поэтому решили делать это по крону

в catalog в __custom.php прописали метод, который перебирает товары и ставит в них рублевую цену:

public function setRubPrice()
{
$now = time();
$pages = new selector('objects');
$pages->types('object-type')->name('catalog', 'object');
$pages->option('or-mode')->fields('price_dollar', 'price_euro');
$pages->option('or-mode')->field('next_update_price');
$pages->where('next_update_price')->eqless($now);
$pages->where('next_update_price')->isnull(true);
$pages->where('price_euro')->more(0);
$pages->where('price_dollar')->more(0);
$pages->limit(0, 100);
foreach($pages as $page)
{
$price = $page->price;
$objectId = $page->id;
$page->setValue('price', 0); [b]/* **** */ [/b]     
                $page->setValue('price',$price);      $page->setValue('next_update_price',$now + 60*60*4);     
                $page->commit();     
                umiObjectsCollection::getInstance()->unloadObject($objectId);
}

return true;
}

в custom_events.php прописали

<?php    new umiEventListener('cron', 'catalog', 'setRubPrice'); ?>

все работает, но приходится сначала сбрасывать значение цены **** $page->setValue('price',0); иначе значение в базе не меняется. Вот такая вот странность

может быть проблема в моем коде?
« Последнее редактирование: 03 Октября 2015, 03:24:46 от crazygeorgio »