Синтаксис
В основе cSmarty лежит синтаксис языка Паскаль и, его реализации, freepascal со вставками HTML кода. Шаблон, по умолчанию, состоит из HTML кода, а программный код помещается между символов <{ и }>.
В отличии от паскаля cSmarty не требует обязательного объявления переменных, и автоматически определяет их типы, добавлен оператор соединения «.» (точка, аналог языка PHP):
<{
s := 'яблоко №' . 55 . 44;
$s;
// результат 'яблоко №5544'
}>
Для вывода строки можно просто в ее начало поставить знак $. Текстовые значения заключаются в одинарные кавычки, если нужно поставить апостроф— ставится два апострофа подряд.
Основные операторы cSmarty:
:= Оператор присвоения (s := 'новое значение переменной';);
+= Присоединяет к значению переменной дополнительное значение (s += 'еще текст';)
= Оператор сравнения возвращает 1 в случае совпадения значений (if a = 5 then $'a равно 5';);
> Если левое значение больше правого возвращает 1 (if a > 5 then $'a больше 5';);
< Если левое значение меньше правого возвращает 1 (if a < 5 then $'a меньше 5';);
>= Если левое значение больше или равно правому возвращает 1 (if a >= 5 then $'a больше или равно 5';);
<= Если левое значение меньше или равно правому возвращает 1 (if a <= 5 then $'a меньше или равно 5';);
<> Если левое и правое значение не равны возвращает 1 (if a <> 5 then $'a не равна 5-и';);
. Соединяет значения ('яблоко №' . 55 . 44 );// результат 'яблоко №5544
+ Суммирует значения ('яблоко №' + (55 + 44) );// результат 'яблоко №99'
* Оператор умножения (i := 5 * 5 );// I равняется 25
/ Оператор деления (i := 25 / 5 );// I равняется 5
mod Возвращает остаток (i := 10 mod 3 );// I равняется 1
and Если левое и правое значение не равняется нолю — возвращает 1 (if (a < 5) and (b < 5) then $'a и b меньше 5-и';);
or Если левое или правое значение не равняется нолю — возвращает 1 (if (a < 5) or (b < 5) then $'a или b меньше 5-и';);
not Превращает правое значение в обратное (if not (a < 5) then $'a не меньше 5-и';);
xor Сумматор по модулю 2.
Проверки и условия.
Для того, чтоб поставить условие для исполнения строки, можно просто в ее конце вставить оператор if и условие
<{
$'a больше 5-ти' if a > 5;
}>
При стандартной постановке условия сначала ставиться оператор if потом условие, потом оператор then, потом исполняемый код (этот кодисполняется если условие не вернет 0), после else код исполняется если условие вернет 0.
<{
if x > 5 then $'x больше 5-ти' else $'x не больше 5-ти';
}>
Оператор else можно не вставлять
<{
if x > 5 then $'x больше 5-ти';
}>
Для того чтоб при условии исполнить сразу несколько строк можно использовать блок begin and;
<{
if x > 5 then
begin
x := 6;
$'i больше 5-ти, переменной x присвоено 6';
end
else
begin
x := 4;
$'i не больше 5-ти, переменной x присвоено 4';
end;
}>
Если нужно при разных значениях исполнять различные операции — можно использовать оператор case.
В начале ставим оператор case, потом значение которое хотим сравнивать, потом do и обрабатываем значения
<{
Case x do // case, потом значение которое хотим сравнивать, потом do
4: $'x равно 4'; // значение с которым хотим сравнить, двоеточие и действие.
7: $'x равно 7';
8:
begin
x := 10;
$'x было 8, стало 10';
end;
'яблоко': $'x равно «яблоко»';
else $'x равно чему-то иному'; // эту строку можно не ставить
end; // в конце end обязательно
}>
Цыклы
Для цыклов можно использовать нескольких операторов, repeat, for, while.
Оператор For:
Работает с конкретной переменной, цыкл повторяется до тех пор пока данная переменная не пройдет от первого до второго значения
<{
for i := 10 to 20 do $'цыкл №' . i . ' считая от 10 до 20';
}>
Если в цыкле нужно исполнять несколько операций то можно использовать блок begin end
<{
loop := 0;
for i := 10 to 20 do
begin
$'цыкл №' . i . ' считая от 10 до 20';
loop := loop+1;
$'Этот цыкл уже прошел ' . loop . ' раз';
end;
}>
Оператор While
Оператор while повторяет действие если условие возвращает не 0, если условие сразу равно 0 — действие вообще не исполняется.
<{
i := 20;
while i > 10 do i := i - 1;
}>
Если в цыкле нужно исполнять несколько операций то можно использовать блок begin end
<{
i := 20;
while i > 10 do
begin
i := i – 1;
$'переменная «i» > 10, делаем ее меньше на один';
end;
}>
Оператор repeat
Оператор repeat повторяет участок кода до оператора until пока условие указанное в until вернет не 0
<{
i := 20;
repeat
i := i -1;
$'переменная i не достигла значения меньше десяти, повторяем операцию';
until i < 10;
}>