Где формируется цифра и внешний вид цены?


Добрый день Василий! Доброго дня комьюнити!
Умные люди подскажите, пожалуйста, в каком файле формируется внешний вид цены?
В чем суть:
1. miniShop обрубает ноль после точки-разделителя в цене, т.е., например, вместо желаемого 8.50 выводит 8.5;
2. Как задать свой стиль для того, что после точки (для копейек или центов), например
8.50, да еще если «50» в верхнем регистре — смотрится куда лучше 8.50.
3. Возможно ли заменить точку-разделитель на запятую?

Почему я этим загоняюсь?
Юзабилити.
У нас еще ходят копейки и есть цена в валютах, где центы играют роль, особенно при пересчете скидок.
Цены вида 300.00, 525.00, 8.50, 7.40 воспринимаются покупателем гораздо легче, чем 300, 525, 8.5, 7.4. Ноли после после точки-разделителя или запятой-раздлителя, или в конце суммы, как ни странно, не тормозят взгляд покупателя. Подсознательно — это завершенное, «круглое» число.
ЗЫ. Во многих плгинах и CMS магазинов прсутсвует выбор вида разделителей и того, что отображается после него.

Василий! Вам огромное спасибо и невероятный респектише за проделанную работу, потраченное время и отзывчивость!
Вы умеете конкурировать и это вызывает еще большее уважение!
02 октября 2012, 12:16    Иван Волков   
1    1519 0

Комментарии (14)

  1. Василий Наумкин 02 октября 2012, 15:03 # 0
    miniShop ничего не отрезает. На самом деле, в базе данных Mysql не хранятся лишние нолики.
    Нет числа 8.50, есть 8.5 или 8.58, понимаете?

    Поэтому, вам нужно написать простенький сниппет форматирования для цены, и вызывать его в чанках, где надо. rtfm.modx.com/display/revolution20/Input+and+Output+Filters+%28Output+Modifiers%29
    1. Иван Волков 02 октября 2012, 15:11 # 0
      Большое спасибо! Ушел сильно думать:)
    2. Иван Брежнев 02 октября 2012, 16:53 # 0
      есть такая функция в php для формирование формата вывода числа, number_format()
      www.php.net/manual/ru/function.number-format.php
      1. Иван Волков 02 октября 2012, 17:54 # 0
        Спасбо, Иван!
        Из прочитанного по ссылке делаю такие выводы:
        по идее мне подойтет:

        <?php
        $number = 1234,56;

        // снг формат без разделителей групп
        $su_format_number = number_format($number, 2, ',', '');
        ?>

        Результат: 1234,57
        СНГ формат — вид чисел к которому мы привыкли со школы.
        Судя из следуещего примера эта функция округляет числа.
        т.е. .896 после разделителя (сепаратора) функция округлила до .90
        (php таки наш человек =))

        так же нашел подсказки для разного изврата :) с видом цены:
        <?php
        $number = 1234567.896;
        echo '1: '.number_format($number, 2, ',', '').'
        ';
        echo '2: '.number_format($number, 2, '.', '').'
        ';
        echo '3: '.number_format($number, 2, ',', '.').'
        ';
        echo '4: '.number_format($number, 2, '.', ',').'
        ';
        echo '5: '.number_format($number, 2, ',', ' ').'
        ';
        echo '6: '.number_format($number, 2, ',', "'").'
        ';
        echo '7: '.number_format($number, 2, '', '').'
        ';
        ?>

        Result:

        1: 1234567,90 -> Decimal separado por, (сепаратор — запятая)
        2: 1234567.90 -> Decimal separado por. (сепаратор — точка)
        дальше — прочие извращения с разделителями)
        3: 1.234.567,90 -> Moeda Brasil, Alemanha
        4: 1,234,567.90 -> Inglês, USA
        5: 1 234 567,90 -> França
        6: 1'234'567,90 -> Suíça
        7: 123456790 -> Sem decimal

        хм… осталось домучать Василия с вопросом как это применить в виде снипета и куда его потом «всувать»…
        Перечитал по его ссылке материал, совсем запутался…
        1. Василий Наумкин 02 октября 2012, 19:14 # 0
          Как и все фильтры вывода — [[+price:yoursnippetname]] в нужных местах.

          Я же дал вам ссылку, смотрите там раздел «Creating a Custom Output Modifier»
          1. Иван Волков 02 октября 2012, 20:15 # 0
            вот! спасибо за действительно внятное объяснение!
            Дело в том, что фильтры я еще особо не осваивал. Т.е. функционала заложенного Вами в miniShop, для моих целей, вполне достаточно. То, что попадалось под руку и нужно было править делал почти интуитивно :)
            Материал, на который Вы дали ссылку перечмтал два раза, но пока Вы не показали «на пальцах» — путался)
            Еще раз спасибо!
            1. Иван Волков 02 октября 2012, 20:17 # 0
              ЗЫ. обязательно выложу код сниппета. Во первых — проверить правильность, во вторых — комунибудь да пригодится.
          2. Иван Брежнев 02 октября 2012, 20:16 # 0
            Вот пример моего модификатора по формированию цены

            <?php
            $output = number_format($input,(floor($input) == $input? 0: 2),'.',' ');
            return $output;
            1. Иван Брежнев 02 октября 2012, 20:16 # 0
              Вызываю вот так [[+price:num]]
              1. Иван Волков 02 октября 2012, 20:21 # 0
                Спасибо! Попробую и ваш вариант!
                1. Иван Брежнев 02 октября 2012, 20:22 # 0
                  Но он обрезает нули если их нет в цене. Вам не подойдет
                  Вам такой нужен
                  <?php
                  $output = number_format($input,2,'.',' ');
                  return $output;
                  1. Иван Волков 02 октября 2012, 20:30 # 0
                    Иван, громадное спасибо! Сэкономили кучу времени и нервов, которые бы тратились на пробы и ошибки!:)
                    1. Иван Брежнев 02 октября 2012, 20:32 # 0
                      Пожалуйста.
        2. Виктор Долгий 12 июня 2014, 19:52 # 0
          Забавно и неудобно то, что при указании разделителя десятичных запятой — перестают обрезаться нули.
          Вы должны авторизоваться, чтобы оставлять комментарии.