Variable modifiers can be applied to
variables,
custom functions or strings.
To apply a modifier, specify the value followed by a |
(pipe) and the modifier name. A modifier may accept additional parameters
that affect its behavior. These parameters follow the modifer name and are
separated by a : (colon). Also,
all php-functions can be used as modifiers implicitly
(more below) and modifiers can be
combined.
.
Example 5-1. Modifier examples
{* apply modifier to a variable *}
{$title|upper}
{* modifier with parameters *}
{$title|truncate:40:'...'}
{* apply modifier to a function parameter *}
{html_table loop=$myvar|upper}
{* with parameters *}
{html_table loop=$myvar|truncate:40:'...'}
{* apply modifier to literal string *}
{'foobar'|upper}
{* using date_format to format the current date *}
{$smarty.now|date_format:"%Y/%m/%d"}
{* apply modifier to a custom function *}
{mailto|upper address='smarty@example.com'}
{* using php's str_repeat *}
{'='|str_repeat:80}
{* php's count *}
{$myArray|@count}
{* php's shuffle on servers's ip *}
{$smarty.server.SERVER_ADDR|shuffle}
(* this will uppercase and truncate the whole array *}
<select name="name_id">
{html_options output=$myArray|upper|truncate:20}
</select>
If you apply a modifier to an array variable instead of a single value variable,
the modifier will be applied to every value in that array. If you really want
the modifier to work on an entire array as a value, you must prepend the
modifier name with a @ symbol.
Example: {$articleTitle|@count} - will print out the number of
elements in the $articleTitle array using the php
count()
function as a modifier.
Modifiers are autoloaded from the $plugins_dir
or can be registered explicitly with the register_modifier()
function. The later is useful for sharing a function between
php scripts and smarty templates.
All php-functions can be used as modifiers implicitly, as demonstrated in the
example above.
However, using php-functions as modifiers has two little pitfalls:
First - sometimes the order of the function-parameters is
not the desirable one. Formatting $foo with
{"%2.f"|sprintf:$foo} actually
works, but asks for the more intuitive, like
{$foo|string_format:"%2.f"} that is provided by
the Smarty distribution.
Secondly - if $security is enabled, all php-functions that
are to be used as modifiers have to be declared trusted in the
MODIFIER_FUNCS element of the
$security_settings array.