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

Добрый день Василий! Доброго дня комьюнити!
Умные люди подскажите, пожалуйста, в каком файле формируется внешний вид цены?
В чем суть:
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, 08:16
modx.pro
1
5 681
0

Комментарии: 14

Василий Наумкин
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
    Иван Волков
    02 октября 2012, 15:11
    0
    Большое спасибо! Ушел сильно думать:)
    Иван Брежнев
    02 октября 2012, 16:53
    0
    есть такая функция в php для формирование формата вывода числа, number_format()
    www.php.net/manual/ru/function.number-format.php
      Иван Волков
      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

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

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

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