Skip to content

Operators

Basic

Various basic operators can be applied directly to variable values.

Examples

{$foo + 1}

{$foo * $bar}

{$foo->bar - $bar[1] * $baz->foo->bar() -3 * 7}

{if ($foo + $bar.test % $baz * 134232 + 10 + $b + 10)}
    ...
{/if}

{$foo = $foo + $bar}

Note

Although Smarty can handle some very complex expressions and syntax, it is a good rule of thumb to keep the template syntax minimal and focused on presentation. If you find your template syntax getting too complex, it may be a good idea to move the bits that do not deal explicitly with presentation to PHP by way of plugins or modifiers.

Ternary

You can use the ?: (or ternary) operator to test one expression and present the value of the second or third expression, based on the result of the test.

In other words:

{$test ? "OK" : "FAIL"}
will result in OK if $test is set to true, and in FAIL otherwise.

There is also a shorthand ?: operator:

{$myVar ?: "empty"}
will result in 'empty' if $myVar is not set or set to something that evaluates to false, such as an empty string. If $myVar is set to something that evaluates to true, the value of $myVar is returned. So, the following will return 'hello':
{$myVar="hello"}
{$myVar ?: "empty"}

Testing for null

If "something that evaluates to false" is to broad a test for you, you can use the ?? (or null coalescing) operator to trigger only if the tested value is undefined or set to null.

{$myVar ?? "empty"}
will result in 'empty' if $myVar is not set or set to null. If $myVar is set to something that evaluates to anything else, the value of $myVar is returned. So, the following will return an empty string (''):
{$myVar=""}
{$myVar ?: "this is not shown"}