Формат вывода заполнителя
Я создаю динамический список placeholder
s, некоторые значения в этих заполнителях являются десятичными числами, которые должны представлять деньги.
Что мне интересно, есть ли способ отформатировать их для отображения как таковой?
Что-то вроде [[+MoneyField:formatmoney]]
Я вижу http://rtfm.modx.com/revolution/2.x/making-sites-with-modx/customizing-content/input-and-output-filters-(output-modifiers) но не вижу способа сделать это здесь.
1 ответ
Вы наверняка можете, под заголовком "Создание пользовательского модификатора вывода" на ссылке, которую вы разместили, описано, как вы можете поместить имя фрагмента в качестве модификатора вывода. Этот фрагмент получит [[+MoneyField]]
значение в переменной с именем $input
,
Таким образом, вам придется создать этот пользовательский фрагмент, который может быть так же просто, как
return '$'.number_format($input);
Другая версия этого - вызов фрагмента напрямую, а не как модификатор вывода, например так:
[[your_custom_money_format_snippet ? input=`[[+MoneyField]]`]]
Я не уверен, есть ли какая-либо разница между двумя в этом случае. Очевидно, что вы можете передать любое значение в фрагмент числового формата при вызове его как фрагмента вместо модификатора вывода. И я уверен, что есть микросекунда разницы в производительности двух, но я боюсь, я не знаю, какая из них победит.;)
Обновление: На самом деле нашел точный пример, который вы хотите реализовать по этой ссылке; http://rtfm.modx.com/revolution/2.x/making-sites-with-modx/customizing-content/input-and-output-filters-%28output-modifiers%29/custom-output-filter-examples
Snippet:
<?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=.`]]