PROScript - язык шаблонизатора. Для указания команд языка используются тэги [% ... %] 

Доступ к переменным

Доступ к скалярным переменным: 

[% var %] 
[% $var %] 

Доступ к полям: 

[% var.0 %] 
[% var.field %]
[% var.$field %] 

Значения переменных могут быть хэшем, ссылками на массивы или объектами. 

Если $var - экземпляр объекта, можно вызывать методы 

[% $var.method() %] 
[% $var.method(1, 2, 3) %]
[% $var.method(foo => [1, 2, 3]) %]
[% $var.method({ foo => 'bar' }) %] 

Выражения 

Циклы 

[% FOREACH item IN arrayref %] 
   [% item %]
[% END %] 

    

 [% FOREACH item IN arrayref %] 
        [%- IF loop.is_first -%]
            <first>
        [%- END -%]
        * [% loop.index %]  # 0 origin
        * [% loop.count     #loop.index + 1 %]
        * [% loop.body      # alias toarrayref %]
        * [% loop.size      #loop.body.size %]
        * [% loop.max_index # loop.size- 1 %]
        * [% loop.peek_next #loop.body[ loop.index + 1 ]
        * [% loop.peek_prev #loop.body[ loop.index - 1 ]
        [%- IF loop.is_last -%]
            <last>
        [%- END -%]
[% END %] 

FOREACH не принимает объекты, поэтому их следует преобразовать в массив (объект класса Array)  при помощи методов keys(), values() или kv().

Также поддерживаются директивы для управления циклом NEXT и LAST

Условные выражения

[% IF logical_expression %] 
        Case 1
[% ELSIF logical_expression %]
        Case 2
[% ELSE %]
        Case 3
[% END %] 
[% UNLESS logical_expression %] 
        Case 1
[% ELSE %]
        Case 2
[% END %] 
[% SWITCH expression %] 
    [% CASE case1 %]
        Case 1
    [% CASE case2 %]
        Case 2
    [% CASE DEFAULT %]
        Case 3
[% END %] 

Функции и фильтры 

    [% var | f %] 
    [% f(var)  %]

Виртуальные методы 

[% a.size() %]
[% a.join(", ") %]
[% a.reverse() %]
[% h.size() %]
[% h.keys() %]
[% h.values() %]
[% h.kv() %]

   

Вы нашли ответ?