mirror of
				https://github.com/fenom-template/fenom.git
				synced 2023-08-10 21:13:07 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			317 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			317 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| Syntax [RU]
 | ||
| ===========
 | ||
| 
 | ||
| Fenom implement [Smarty](http://www.smarty.net/) syntax with some improvements
 | ||
| 
 | ||
| ## Variable
 | ||
| 
 | ||
| ### Use variables
 | ||
| 
 | ||
| ```smarty
 | ||
| {$foo}
 | ||
| {$bar}
 | ||
| {$foo[4]}
 | ||
| {$foo.4}
 | ||
| {$foo.bar}
 | ||
| {$foo.'bar'}
 | ||
| {$foo."bar"}
 | ||
| {$foo['bar']}
 | ||
| {$foo["bar"]}
 | ||
| {$foo.$bar}
 | ||
| {$foo[$bar]}
 | ||
| {$foo->bar}
 | ||
| {$foo->bar.buz}
 | ||
| ```
 | ||
| 
 | ||
| ### System variable
 | ||
| 
 | ||
| Unnamed system variable starts with `$.` and allow access to global variables and system info (fix doc):
 | ||
| 
 | ||
| * `$.get` is `$_GET`.
 | ||
| * `$.post` is `$_POST`.
 | ||
| * `$.cookie` is `$_COOKIE`.
 | ||
| * `$.session` is `$_SESSION`.
 | ||
| * `$.globals` is `$GLOBALS`.
 | ||
| * `$.request` is `$_REQUEST`.
 | ||
| * `$.files` is `$_FILES`.
 | ||
| * `$.server` is `$_SERVER`.
 | ||
| * `$.env` is `$_ENV`.
 | ||
| * `$.tpl.name` returns current template name.
 | ||
| * `$.tpl.schema` returns current schema of the template.
 | ||
| * `$.version` returns version of the Fenom.
 | ||
| * `$.const` paste constant.
 | ||
| 
 | ||
| ```smarty
 | ||
| {if $.get.debug? && $.const.DEBUG}
 | ||
|    ...
 | ||
| {/if}
 | ||
| ```
 | ||
| 
 | ||
| ### Multidimensional value support
 | ||
| 
 | ||
| ```smarty
 | ||
| {$foo.bar.baz}
 | ||
| {$foo.$bar.$baz}
 | ||
| {$foo[4].baz}
 | ||
| {$foo[4].$baz}
 | ||
| {$foo.bar.baz[4]}
 | ||
| {$foo[ $bar.baz ]}
 | ||
| ```
 | ||
| 
 | ||
| ### Math operations
 | ||
| 
 | ||
| ```smarty
 | ||
| {$x+$y}
 | ||
| {$foo[$x+3]}
 | ||
| {$foo[$x+3]*$x+3*$y % 3}
 | ||
| ```
 | ||
| 
 | ||
| See all [operators](./operators.md)
 | ||
| 
 | ||
| ### Object support
 | ||
| 
 | ||
| ```smarty
 | ||
| {$object->item}
 | ||
| {$object->item|upper} {* apply modifier *}
 | ||
| {$object->item->method($y, 'named')}
 | ||
| {$object->item->method($y->name, 'named')|upper} {* apply modifier to method result*}
 | ||
| ```
 | ||
| 
 | ||
| You may disable call methods in template, see in [security options](./settings.md) option `deny_method`
 | ||
| 
 | ||
| ### Static method support
 | ||
| 
 | ||
| ```smarty
 | ||
| {Lib\Math::multiple x=3 y=4} static method as tag
 | ||
| {Lib\Math::multiple(3,4)}  inline static method
 | ||
| {12 + Lib\Math::multiple(3,4)}
 | ||
| {12 + 3|Lib\Math::multiple:4}  static method as modifier
 | ||
| ```
 | ||
| 
 | ||
| You may disable call static methods in template, see in [security options](./settings.md) option `deny_static`
 | ||
| 
 | ||
| ### Set variable
 | ||
| 
 | ||
| ```smarty
 | ||
| {var $foo = "bar"}
 | ||
| {var $foo = "bar"|upper} {* apply modifier *}
 | ||
| {var $foo = 5}
 | ||
| {var $foo = $x + $y}
 | ||
| {var $foo = $x.y[z] + $y}
 | ||
| {var $foo = strlen($a)} {* work with functions *}
 | ||
| {var $foo = myfunct( ($x+$y)*3 )}
 | ||
| {var $foo.bar.baz = 1} {* multidimensional value support *}
 | ||
| {var $foo = $object->item->method($y, 'named')} {* work with object fine *}
 | ||
| ```
 | ||
| 
 | ||
| Using block tag
 | ||
| 
 | ||
| ```smarty
 | ||
| {var $foo}
 | ||
|     content {$text|truncate:30}
 | ||
| {/var}
 | ||
| {var $foo|truncate:50} {* apply modifier to content *}
 | ||
|     content {$text}
 | ||
| {/var}
 | ||
| ```
 | ||
| 
 | ||
| Set array
 | ||
| 
 | ||
| ```smarty
 | ||
| {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]}
 | ||
| {var $foo = [$a, $d.c, $a + $f]}
 | ||
| {var $foo = ['y' => 'yellow', $color|upper => $colors[ $color ]}
 | ||
| {var $foo = [1, [$parent, $a->method()], 3]}
 | ||
| ```
 | ||
| 
 | ||
| See also [{var}](./tags/var.md) documentation.
 | ||
| 
 | ||
| 
 | ||
| ## Scalar values
 | ||
| 
 | ||
| ### Strings
 | ||
| 
 | ||
| When the string in double quotation marks, all the expressions in the string will be run.
 | ||
| The result of expressions will be inserted into the string instead it.
 | ||
| 
 | ||
| ```smarty
 | ||
| {var $foo="Username"}
 | ||
| {var $user.name="Username"}
 | ||
| {"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
 | ||
| {var $message = "Hi, {$user.name}"}
 | ||
| ```
 | ||
| 
 | ||
| but if use single quote any template expressions will be on display as it is
 | ||
| 
 | ||
| ```smarty
 | ||
| {'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}"
 | ||
| ```
 | ||
| 
 | ||
| ## Numbers
 | ||
| 
 | ||
| ```smarty
 | ||
| {2|pow:10}
 | ||
| {var $magick = 5381|calc}
 | ||
| {0.2|round}
 | ||
| {1e-6|round}
 | ||
| ```
 | ||
| 
 | ||
| ### Modifiers
 | ||
| 
 | ||
| * Modifiers allows change some value before output or using.
 | ||
| * 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).
 | ||
| 
 | ||
| ```smarty
 | ||
| {var $foo="User"}
 | ||
| {$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 "..."
 | ||
| {$looong_text|lower|truncate:$settings.count:$settings.etc}
 | ||
| {var $foo="Ivan"|upper}    sets $foo value "USER"
 | ||
| ```
 | ||
| 
 | ||
| [List of modifiers](./main.md#modifiers)
 | ||
| 
 | ||
| ### Tags
 | ||
| 
 | ||
| Basically, tag seems like
 | ||
| 
 | ||
| ```smarty
 | ||
| {FUNCNAME attr1 = "val1" attr2 = $val2}
 | ||
| ```
 | ||
| 
 | ||
| Tags starts with name and may have attributes
 | ||
| 
 | ||
| Это общий формат функций, но могут быть исключения, например функция [{var}](./tags/var.md), использованная выше.
 | ||
| 
 | ||
| ```smarty
 | ||
| {include file="my.tpl"}
 | ||
| {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}
 | ||
| ```
 | ||
| 
 | ||
| ### Ignoring template code
 | ||
| 
 | ||
| В шаблонизаторе Fenom используются фигурные скобки для отделения HTML от кода Fenom.
 | ||
| Если требуется вывести текст, содержащий фигурные скобки, помните о следующих возможностях:
 | ||
| 
 | ||
| 1. Использование блочного тега `{ignore}{/ignore}`. Текст внутри этого тега текст не компилируется шаблонизатором и выводится как есть.
 | ||
| 2. Если после открывающей фигурной скобки есть пробельный символ (пробел или `\t`) или перенос строки (`\r` или `\n`), то она не воспринимается как разделитель кода Fenom и код после неё выводится как есть.
 | ||
| 
 | ||
| Пример:
 | ||
| 
 | ||
| ```smarty
 | ||
| {ignore}
 | ||
| <style>
 | ||
| 	h1 {font-size: 24px; color: #F00;}
 | ||
| </style>
 | ||
| {/ignore}
 | ||
| <script>
 | ||
| 	(function (text) {
 | ||
| 		var e = document.createElement('P');
 | ||
| 		e.innerHTML = text;
 | ||
| 		document.body.appendChild(e);
 | ||
| 	})('test');
 | ||
| </script>
 | ||
| {if:ignore $js_enabled}
 | ||
| 
 | ||
| {/if}
 | ||
| ```
 | ||
| 
 | ||
| Outputs
 | ||
| 
 | ||
| ```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>
 | ||
| ```
 | ||
| 
 | ||
| ### Whitespaces
 | ||
| 
 | ||
| Шаблонизатор допускает любое количество пробелов или переносов строк в своём коде
 | ||
| 
 | ||
| ```smarty
 | ||
| {include 'control.tpl'
 | ||
|     $options = $list
 | ||
|     $name    = $cp.name
 | ||
|     $type    = 'select'
 | ||
|     isolate  = true
 | ||
|     disable_static = true
 | ||
| }
 | ||
| 
 | ||
| {foreach [
 | ||
|     "one"   => 1,
 | ||
|     "two"   => 2,
 | ||
|     "three" => 3
 | ||
| ] as $key   => $val}
 | ||
| 
 | ||
|     {$key}: {$val}
 | ||
| 
 | ||
| {/foreach}
 | ||
| ```
 | ||
| 
 | ||
| ### Tag options
 | ||
| 
 | ||
| |    name | code | type  | description  |
 | ||
| | ------- | ---- | ----- | ------------ |
 | ||
| |   strip |    s | block | remove any multi-whitespaces |
 | ||
| |   ltrim |    l | any   | remove spaces left of the tag  |
 | ||
| |   rtrim |    r | any   | remove spaces right of the tag |
 | ||
| |    trim |    t | any   | remove spaces near tag |
 | ||
| |     raw |    a | any   | ignore escape option |
 | ||
| |  escape |    e | any   | force escape |
 | ||
| |  ignore |    i | block | ignore Fenom syntax |
 | ||
| 
 | ||
| ```smarty
 | ||
| {script:ignore} ... {/script}
 | ||
| {foreach:ignore:strip ...} ... {/foreach}
 | ||
| ```
 | 
