Форматирование чисел

Не нашел в MODX решения с форматированием чисел на триады. Пришлось написать свой костыль. Как обычно создаем сниппет с произвольным именем, например незамысловато nf (NumberFormat), с таким кодом:

<?php
$number = trim($input);
$separator = ($options=='') ? '&nbsp;' : $options;
$count = substr_count($number, $separator);
if ($count == 0) {
    $number = number_format($number, 0,'' , $separator);
} else {
    $number = $number;
}
return $number;

 Вызываем в нужном месте так:

[[+price:nf=` `]]

На выходе получаем 12 000 400.

Если в сниппет передается пустое значение, то по умолчанию разделитель будет неразнывный пробел. Можно передать любой другой символ.

Поигравшись с PHP функцией number_format(), можно настроить любой разделитель триад, и добавить значения после запятой...


 

Был не прав!

Есть оказывается решение, причем на сайте документации.

numberformat

http://php.net/manual/en/function.number-format.php

 

Example:

<?php
$number = floatval($input);
$optionsXpld = @explode('&', $options);
$optionsArray = array();
foreach ($optionsXpld as $xpld) {
    $params = @explode('=', $xpld);
    array_walk($params, create_function('&$v', '$v = trim($v);'));
    if (isset($params[1])) {
        $optionsArray[$params[0]] = $params[1];
    } else {
        $optionsArray[$params[0]] = '';
    }
}
$decimals = isset($optionsArray['decimals']) ? $optionsArray['decimals'] : null;
$dec_point = isset($optionsArray['dec_point']) ? $optionsArray['dec_point'] : null;
$thousands_sep = isset($optionsArray['thousands_sep']) ? $optionsArray['thousands_sep'] : null;
$output = number_format($number, $decimals, $dec_point, $thousands_sep);
return $output;

[[+price:numberformat=`&decimals=2&dec_point=,&thousands_sep=.`]]