cTemplate Expressions

A number of cTemplate Statements, including #ASSIGN, #CALC and #IF, take an expression parameter.  An expression can be a simple value or variable, but it can also include text, math, logic and functions to produce the ultimate value that will be passed as the parameter value.  The following are supported in cTemplate expressions.


Keyword Meaning
true Boolean TRUE
false Boolean FALSE
null NULL
undefined Not set or invalid result (divide by zero)


Text is represented by a single or double-quoted string of characters.

#ECHO("This is a string of double-quoted text.")
#ECHO('This is a string of single-quoted text.')

Escape Sequences

Certain characters, such as the surrounding quote character, new lines, tabs are preceded by a backslash.

#ECHO("This is a string with \"quoted text\" and a trailing new line.\n")

UTF8 character codes are also preceded by a backslash to specify any UTF8 character.

#ECHO("This is a utf8 character: \u263a")

Appending Strings

Multiple strings and variables can be appended together with the plus sign (+).

#ECHO("Hello" + ' World.')


#ASSIGN($a, ${b.Field})
    $a = ${b.Field};
    $a = $b.Field;  // {} notation not required in #CSCRIPT

Arrays and Collections

#/ initialize arrays
#ASSIGN($array1, [])
#ASSIGN($array2, [1,2,3])

#/ output array2's 3rd element: 3
    $array1 = [];
    $array2 = [1,2,3];
    $array2 []= 4;

Associative Arrays

#ASSIGN($array1, [])
#ASSIGN($array2, ['a': 1, 'b': 2, 'c': 3])
    $array2 = [];
    $array3 = ['a': 1, 'b': 2, 'c': 3];
    $array3['a'] = 1;
    $array3['b'] = 2;
    $array3['c'] = 3;


#ASSIGN($object, {})
#{$object.Property = 'value';}
    $object = {}; // initial properties can not be set yet
    $object.Property = 'value';


Operator Description
= Equal
+= Add (numbers) or append (string)
-= Subtract (numbers)
*= Multiply (numbers)
/= Divide (numbers)

Comparison Operators

Operator Description
== or eq Equal
!= or ne Not Equal
=== Exactly Equal (same type and value)
!== Not Exactly Equal (same type and value)
<=> Sort comparison: -1, 0 or 1
< or lt Less than
> or gt Greater than
<= or le Less than or Equal
>= or ge Greater than or Equal


Operator Description
|| Logical OR
&& Logical AND


Operator Description
+, -, *, /, % Add, Subtract, Multiply, Divide, Modulo (divide and return remainder)
++ Increment
-- Decrement
=~ Regular expression match or substitution, formatted like Perl, except uses PHP's preg_match() and preg_replace() internally.

Ternary Operator (?:)

Provides a shorthand #IF/#ELSE.

#ASSIGN($y, $x == 5 ? 5 : 0)

Undefined Coalescing Operator (??)

Provides a shorthand #IF($x !== UNDEFINED) $x #ELSE default #ENDIF.  This is the same as the Null Coalescing Operator in PHP.

#ASSIGN($y, $x ?? 'default')

Directives and Functions

All cTemplate Directives and cScript Functions are allowed, as if already in #CSCRIPT.  In other words, #COUNT($list) can appear in an expression as well as count($list).


#ASSIGN($array, [1, 2, 3])
#IF(#COUNT($array) < 3)
There are less than 3 items.
#ELSEIF(count($array) >= 3)
There are 3 or more items.