fenom/docs/syntax.md
2013-02-09 10:59:08 +04:00

193 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Синтаксис
=========
### Вывод переменной
Вывод значений переменных в шаблонизаторе Aspect идентичен правилам вывода шаблонизатора Smarty
```smarty
{$foo}
{$foo[4]}
{$foo.4}
{$foo.bar}
{$foo.'bar'}
{$foo."bar"}
{$foo[bar]}
{$foo['bar']}
{$foo["bar"]}
{$foo.$bar}
{$foo[$bar]}
{$foo->bar}
{$foo->bar()}
```
Комбинированные варианты
```smarty
{$foo.bar.baz}
{$foo.$bar.$baz}
{$foo[4].baz}
{$foo[4].$baz}
{$foo.bar.baz[4]}
{$foo->bar($baz, 2, $bar)}
{"foo"}
```
### Математические операции
```smarty
{$x+$y} // will output the sum of x and y.
{$foo[$x+3]} // as array index
{$foo[$x+3]*$x+3*$y % 3}
```
### Объявление переменных
```smarty
{var $foo = $x + $y}
{var $foo = $x.y[z] + $y}
{var $foo = strlen($a)}
{var $foo = myfunct( ($x+$y)*3 )}
{var $foo.bar.baz = 1}
```
#### Объявление массивов
```smarty
{var $foo=[1,2,3]}
{var $foo=['y'=>'yellow','b'=>'blue']}
{var $foo=[1,[9,8],3]} // can be nested
```
### Работа с объектами
```smarty
{$object->method1($x)->method2($y)}
{var $foo=$object->item->method($y, 'named')}
```
### Работа со строками
Строки в Aspect обрабатываются идентично правилам подстановки переменных в строки в PHP, т.е. в двойных кавычках переменная заменяется на её значение, в одинарных замены не происходит.
В отличие от Smarty в строках не обрабатываются управляющие конструкции, например "if", но работают модификаторы.
```smarty
{var $foo="Ivan"}
{var $user.name="Ivan"}
{"Hi, $foo"} выведет "Hi, Ivan"
{"Hi, {$foo}"} выведет "Hi, Ivan"
{"Hi, {$user.name}"} выведет "Hi, Ivan"
{'Hi, $foo'} выведет 'Hi, $foo'
{'Hi, {$foo}'} выведет 'Hi, {$foo}'
```
### Модификаторы
* Модификаторы позволяют изменить значение переменной перед выводом или использованием в выражении
* Модификаторы записываются после переменной через символ вертикальной черты "|"
* Модификаторы могут иметь параметры, которые записываются через символ двоеточие ":" после имени модификатора
* Параметры модификаторов друг от друга также разделяются символом двоеточие ":"
* В качестве параметров могут использоваться переменные.
* Модификаторы могут составлять цепочки. В этом случае они применяются к переменной последовательно слева направо
```smarty
{var $foo="Ivan"}
{$foo|upper} выведет "IVAN"
{$foo|lower} выведет "ivan"
{$looong_text|truncate:80:"..."} обрежет текст до 80 символов и добавит "..." в конец текста
{$looong_text|lower|truncate:$settings.count:$settings.etc}
{var $foo="Ivan"|upper} переменная $foo будет содержать "IVAN"
```
Подробнее модификаторы описаны в разделе [модификаторы](./docs/modifiers.md)
### Функции
Каждый тэг шаблонизатора либо выводит переменную, либо вызывает какую-либо функцию.
Тег вызова функции начинается с названия функции и содержит список аргументов:
```smarty
{FUNCNAME attr1 = "val1" attr2 = $val2}
```
Это общий формат функций, но могут быть исключения, например функция {var}, использовавшаяся выше.
```smarty
{include file="my.tpl"}
{mailto address="bzick@megagroup.ru" text="Article's author"}
{var $foo=5}
{if $user.loggined}
Welcome, <span style="color: red">{$user.name}!</span>
{else}
Who are you?
{/if}
```
Аргументы
Аргументы принимают любой формат переменных, в том числе результаты арифметических операций и модификаторов.
```smarty
{funct arg=true}
{funct arg=5}
{funct arg=1.2}
{funct arg='string'}
{funct arg="string this {$var}"}
{funct arg=[1,2,34]}
{funct arg=$x}
{funct arg=$x.c}
```
```smarty
{funct arg="ivan"|upper}
{funct arg=$a.d.c|lower}
```
```smarty
{funct arg=1+2}
{funct arg=$a.d.c+4}
{funct arg=($a.d.c|count+4)/3}
```
###
Как и в Smarty, в шаблонизаторе Aspect используются фигурные скобки для отделения HTML от кода Aspect.
Если требуется вывести текст, содержащий фигурные скобки помните о следующих возможностях:
1. Использование блочного тега `{ignore}{/ignore}`. Текст внутри этого тега не компилируется шаблонизатором и выводится "как есть".
2. Если после открывающей фигурной скобки есть пробельный символ, то она не воспринимается как разделитель Aspect и код после неё выводится "как есть".
Пример:
```smarty
{ignore}
<style>
h1 {font-size: 24px; color: #F00;}
</style>
{/literal}
<script>
(function (text) {
var e = document.createElement('P');
e.innerHTML = text;
document.body.appendChild(e);
})('test');
</ignore>
```
Выведет
```html
<style>
h1 {font-size: 24px; color: #F00;}
</style>
<script>
(function (text) {
var e = document.createElement('P');
e.innerHTML = text;
document.body.appendChild(e);
})('test');
</script>
```