Округление цен в магазине

Модератор
#
Округление цен в магазине
Централизованно округлить цены можно установкой формата округление для Shop_Controller.

В файл bootstrap.php, в корне, добавьте для округления до десятых:
Shop_Controller::instance()->floatFormat("%.1f");

до целых
Shop_Controller::instance()->floatFormat("%.0f");
#
Re: Округление цен в магазине
Как округлить до десятков в большую сторону?
Скажем имеем 121,45, округленное получаем 130?
Модератор
#
Re: Округление цен в магазине
Такой возможности нет, к сожалению. Можем манипулировать только форматами sprintf()
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Округление цен в магазине
К сожалению способ не работает на HostCMS 6, обновлённой с пятой версии ((
Модератор
#
Re: Округление цен в магазине
Cmak83,
в режиме эмуляции конечно не работает, т.к. там не используется Shop_Controller_Show
#
Re: Округление цен в магазине
А как быть тем, чей сайт работает в режиме эмуляции?
Все цены сейчас на сайте отображаются с 2умя нулями после запятой - 325,00. При добавлении скидки к товару, у цены появляются копейки - 295,32
Как избавиться от копеек в цене?
#
Re: Округление цен в магазине
в xsl шаблонах везде поменял
<xsl:value-of select="format-number($price, '### ##0,00', 'my')"/>

на
<xsl:value-of select="format-number($price, '### ##0', 'my')"/>

И везде копейки ушли, везде кроме одного места.
А именно, когда заказ оформляю, нажимаю оформить в корзине, появляется сообщение о том что заказ оформлен и высвечивается список заказанных товаров. К сожалению в этом списке нули сохранились. Шаблона этого сообщения в xsl шаблонах нет. Куда копать?
#
Re: Округление цен в магазине
Скачал с ftp всю папку xsl и виндоус поиском по файлам текста нашел нужный шаблон и исправил в нём всё что надо.
Теперь копеек нет нигде.
#
Re: Округление цен в магазине
Отличная штука, спасибо
#
Re: Округление цен в магазине
С помощью этого хука можем округлять цены до десятых, сотых и тысячных.

class Shop_Price_Observer
{
    static public function round($price)
    {
        /*
        -3 — до тысяч
        -2 — до сотен
        -1 — до десятков
        */
        return round($price, -2);
    }
    
    static public function onAfterCalculatePrice($object, $args)
    {
        $aPrice = $object->getAPrice();
        $aPrice['price_discount'] = self::round($aPrice['price_discount']);
        $object->setAPrice($aPrice);
    }
}

Core_Event::attach('Shop_Item_Controller.onAfterCalculatePrice', array('Shop_Price_Observer', 'onAfterCalculatePrice'));


Все работает, но начинает отображаться перечеркнутая старая цена и вверху уже новая округленная.
Подскажите, можно как-то централизованно избавиться от старой перечеркнутой цены или нужно убирать ее во всех шаблонах где она присутствует?
Авторизация