格式化占位符的输出

时间:2013-09-06 13:03:36

标签: format string-formatting modx modx-revolution modx-chunks

我正在创建placeholder s的动态列表,这些占位符中保留的一些值是应该代表金钱的十进制数。

我想知道的是,我是否可以将它们格式化以显示为这样?

[[+MoneyField:formatmoney]]

这样的东西

我看到http://rtfm.modx.com/revolution/2.x/making-sites-with-modx/customizing-content/input-and-output-filters-(output-modifiers),但我没有办法在这里做到这一点。

1 个答案:

答案 0 :(得分:3)

你绝对可以在你发布的链接标题“创建自定义输出修饰符”下描述如何将片段名称作为输出修饰符。此代码段将在名为[[+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

段:

<?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=.`]]