fenom/docs/syntax.md

259 lines
6.5 KiB
Markdown
Raw Normal View History

Syntax [RU]
===========
2013-02-01 19:13:07 +04:00
2013-06-28 11:53:53 +04:00
Fenom have [Smarty](http://www.smarty.net/) like syntax.
2013-05-30 20:00:52 +04:00
2013-06-19 10:56:28 +04:00
## Variable
### Get/print value
2013-02-01 19:13:07 +04:00
```smarty
2013-02-09 10:59:08 +04:00
{$foo}
2013-06-19 10:56:28 +04:00
{$bar}
2013-02-09 10:59:08 +04:00
{$foo[4]}
2013-02-01 19:13:07 +04:00
{$foo.4}
2013-02-09 10:59:08 +04:00
{$foo.bar}
2013-02-01 19:13:07 +04:00
{$foo.'bar'}
{$foo."bar"}
{$foo['bar']}
{$foo["bar"]}
2013-02-09 10:59:08 +04:00
{$foo.$bar}
2013-02-01 19:13:07 +04:00
{$foo[$bar]}
2013-02-09 10:59:08 +04:00
{$foo->bar}
{$foo->bar()}
2013-02-01 19:13:07 +04:00
```
2013-06-19 10:56:28 +04:00
### Multidimensional value support
2013-02-01 19:13:07 +04:00
```smarty
{$foo.bar.baz}
{$foo.$bar.$baz}
{$foo[4].baz}
{$foo[4].$baz}
{$foo.bar.baz[4]}
2013-02-24 14:02:18 +04:00
{$foo[ $bar.baz ]}
2013-02-01 19:13:07 +04:00
```
2013-06-19 10:56:28 +04:00
### Math operations
2013-02-01 19:13:07 +04:00
```smarty
2013-02-19 09:51:33 +04:00
{$x+$y}
{$foo[$x+3]}
2013-02-01 19:13:07 +04:00
{$foo[$x+3]*$x+3*$y % 3}
```
2013-06-19 10:56:28 +04:00
See all [operators](./operators.md)
2013-02-19 09:51:33 +04:00
2013-06-19 10:56:28 +04:00
### Object support
2013-02-01 19:13:07 +04:00
2013-02-19 09:51:33 +04:00
```smarty
2013-06-19 10:56:28 +04:00
{$object->item}
{$object->item|upper} {* apply modifier *}
{$object->item->method($y, 'named')}
{$object->item->method($y->name, 'named')|upper} {* apply modifier to method result*}
2013-02-19 09:51:33 +04:00
```
2013-06-19 10:56:28 +04:00
You may disable call methods in template, see [security options](./settings.md)
### Set variable
2013-02-01 19:13:07 +04:00
```smarty
2013-06-19 10:56:28 +04:00
{var $foo = "bar"}
{var $foo = "bar"|upper} {* apply modifier *}
{var $foo = 5}
2013-02-01 19:13:07 +04:00
{var $foo = $x + $y}
{var $foo = $x.y[z] + $y}
2013-06-19 10:56:28 +04:00
{var $foo = strlen($a)} {* work with functions *}
2013-02-01 19:13:07 +04:00
{var $foo = myfunct( ($x+$y)*3 )}
2013-06-19 10:56:28 +04:00
{var $foo.bar.baz = 1} {* multidimensional value support *}
{var $foo = $object->item->method($y, 'named')} {* work with object fine *}
2013-02-01 19:13:07 +04:00
```
2013-06-19 10:56:28 +04:00
Using block tag
2013-02-01 19:13:07 +04:00
```smarty
2013-06-19 10:56:28 +04:00
{var $foo}
content {$text|truncate:30}
{/var}
{var $foo|truncate:50} {* apply modifier to content *}
content {$text}
{/var}
2013-02-19 09:51:33 +04:00
```
2013-06-19 10:56:28 +04:00
Set array
2013-02-19 09:51:33 +04:00
```smarty
2013-06-19 10:56:28 +04:00
{var $foo = [1, 2, 3]} numeric array
{var $foo = ['y' => 'yellow', 'b' => 'blue']} associative array
{var $foo = [1, [9, 8], 3]} can be nested
{var $foo = [1, $two, $three * 3 + 9]}
2013-02-24 14:02:18 +04:00
{var $foo = [$a, $d.c, $a + $f]}
2013-06-19 10:56:28 +04:00
{var $foo = ['y' => 'yellow', $color|upper => $colors[ $color ]}
{var $foo = [1, [$parent, $a->method()], 3]}
2013-02-01 19:13:07 +04:00
```
2013-06-19 10:56:28 +04:00
See also [{var}](./tags/var.md) documentation.
2013-02-01 19:13:07 +04:00
2013-06-19 10:56:28 +04:00
## Scalar values
2013-02-01 19:13:07 +04:00
2013-06-19 10:56:28 +04:00
### Strings
2013-02-01 19:13:07 +04:00
2013-06-19 10:56:28 +04:00
When the string in double quotation marks, all the expressions in the string will be run.
The result of the expression will be inserted into the string instead it.
2013-02-01 19:13:07 +04:00
```smarty
2013-02-19 09:51:33 +04:00
{var $foo="Username"}
{var $user.name="Username"}
2013-06-19 10:56:28 +04:00
{"Hi, $foo"} outputs "Hi, Username"
{"Hi, {$foo}"} outputs "Hi, Username"
{"Hi, {$user.name}"} outputs "Hi, Username"
{"Hi, {$user.name|up}"} outputs "Hi, USERNAME"
{"Hi, {$user->getName(true)}"} outputs Hi, Username
2013-02-19 09:51:33 +04:00
{var $message = "Hi, {$user.name}"}
2013-02-01 19:13:07 +04:00
```
2013-06-19 10:56:28 +04:00
but if use single quote any template expressions will be on display as it is
2013-02-19 09:51:33 +04:00
```smarty
2013-06-19 10:56:28 +04:00
{'Hi, $foo'} outputs 'Hi, $foo'
{'Hi, {$foo}'} outputs 'Hi, {$foo}'
{'Hi, {$user.name}'} outputs 'Hi, {$user.name}'
{'Hi, {$user.name|up}'} outputs "Hi, {$user.name|up}"
2013-02-19 09:51:33 +04:00
```
2013-06-19 10:56:28 +04:00
## Numbers
2013-02-19 09:51:33 +04:00
```smarty
{2|pow:10}
{var $magick = 5381|calc}
2013-06-19 10:56:28 +04:00
{0.2|round}
{1e-6|round}
2013-02-19 09:51:33 +04:00
```
2013-06-19 10:56:28 +04:00
### Modifiers
2013-02-01 19:13:07 +04:00
* Модификаторы позволяют изменить значение переменной перед выводом или использованием в выражении
2013-06-20 10:36:35 +04:00
* To apply a modifier, specify the value followed by a | (pipe) and the modifier name.
* A modifier may accept additional parameters that affect its behavior. These parameters follow the modifier name and are separated by a : (colon).
2013-02-01 19:13:07 +04:00
```smarty
2013-02-19 09:51:33 +04:00
{var $foo="User"}
2013-06-20 10:36:35 +04:00
{$foo|upper} outputs "USER"
{$foo|lower} outputs "user"
{"{$foo|lower}"} outputs "user"
{"User"|lower}} outputs "user"
{$looong_text|truncate:80:"..."} truncate the text to 80 symbols and append <continue> symbols, like "..."
2013-02-01 19:13:07 +04:00
{$looong_text|lower|truncate:$settings.count:$settings.etc}
2013-06-20 10:36:35 +04:00
{var $foo="Ivan"|upper} sets $foo value "USER"
2013-02-01 19:13:07 +04:00
```
2013-06-19 10:56:28 +04:00
[List of modifiers](./main.md#modifiers)
2013-02-01 19:13:07 +04:00
2013-02-24 14:02:18 +04:00
### Tags
2013-02-01 19:13:07 +04:00
2013-02-19 09:51:33 +04:00
Каждый тэг шаблонизатора либо выводит переменную, либо вызывает какую-либо функцию. (переписать)
2013-02-01 19:13:07 +04:00
Тег вызова функции начинается с названия функции и содержит список аргументов:
```smarty
{FUNCNAME attr1 = "val1" attr2 = $val2}
```
2013-02-19 09:51:33 +04:00
Это общий формат функций, но могут быть исключения, например функция [{var}](./tags/var.md), использованная выше.
2013-02-01 19:13:07 +04:00
```smarty
{include file="my.tpl"}
{var $foo=5}
{if $user.loggined}
Welcome, <span style="color: red">{$user.name}!</span>
{else}
Who are you?
{/if}
```
2013-02-19 09:51:33 +04:00
В общем случае аргументы принимают любой формат переменных, в том числе результаты арифметических операций и модификаторов.
2013-02-01 19:13:07 +04:00
```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}
```
2013-02-24 14:02:18 +04:00
### Ignoring temaplate code
2013-02-01 19:13:07 +04:00
2013-06-28 11:53:53 +04:00
В шаблонизаторе Fenom используются фигурные скобки для отделения HTML от кода Fenom.
2013-05-30 20:00:52 +04:00
Если требуется вывести текст, содержащий фигурные скобки, помните о следующих возможностях:
2013-02-01 19:13:07 +04:00
2013-02-19 09:51:33 +04:00
1. Использование блочного тега `{ignore}{/ignore}`. Текст внутри этого тега текст не компилируется шаблонизатором и выводится как есть.
2013-06-28 11:53:53 +04:00
2. Если после открывающей фигурной скобки есть пробельный символ (пробел или `\t`) или перенос строки (`\r` или `\n`), то она не воспринимается как разделитель кода Fenom и код после неё выводится как есть.
2013-02-01 19:13:07 +04:00
Пример:
```smarty
2013-02-09 10:59:08 +04:00
{ignore}
2013-02-01 19:13:07 +04:00
<style>
h1 {font-size: 24px; color: #F00;}
</style>
2013-02-15 12:17:23 +04:00
{/ignore}
2013-02-01 19:13:07 +04:00
<script>
(function (text) {
var e = document.createElement('P');
e.innerHTML = text;
document.body.appendChild(e);
})('test');
2013-02-09 10:59:08 +04:00
</ignore>
2013-02-01 19:13:07 +04:00
```
Выведет
```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>
2013-02-19 09:51:33 +04:00
```
2013-02-24 14:02:18 +04:00
### Whitespaces
2013-02-19 09:51:33 +04:00
Шаблонизатор допускает любое количество пробелов или переносов строк в своём коде
```smarty
{include 'control.tpl'
2013-02-21 22:47:24 +04:00
options = $list
name = $cp.name
type = 'select'
2013-02-19 09:51:33 +04:00
}
{foreach [
"one" => 1,
"two" => 2,
"three" => 3
2013-05-30 20:00:52 +04:00
] as $key => $val}
2013-02-19 09:51:33 +04:00
{$key}: {$val}
{/foreach}
2013-02-01 19:13:07 +04:00
```