달라진 점. (difference)
{if condition}
{if="condition"}
{elseif condition}
{elseif="condition"}
{include "filename.tpl"}
{include="filename"}
{Func()}
{function="Func()"}
{Func($param,3)}
{function="Func($param,3)"}
{$param|Func:3}
(Similar as smarty)
{foreach $array as $_key => $_val}key:{$_key} val:{$_val}{/foreach}
{loop="$array" as $_key => $_var}key:{$_key} val:{$_val}{/loop}
{loop="$array"}key:{$key} val:{$val}{/loop}
{($variable)|number_format}
(Syntax Error)
{($variable)|number_format}
{for $i=1 to $targetCount}
{loop="range(1,$targetCount)" as $i}
{assign var=myObject value=MyClass::myStaticMethod({$variable})}
(Undefined Feature, Syntax Error ({$variable**}**))
{$myObject=MyClass::myStaticMethod($variable)}
추가적으로 참고용. (Additional)
{filemtime("{constant("__ROOT__")}/static/css2/min.css")}
{function="filemtime(__ROOT__.'/static/css2/min.css')"}
{'text'|__}
{"text"}
정규식 Replace
\{if (.*?)\}
\{if="$1"\}
\{include file="(.*?)\.tpl"\}
\{include="$1"\}
\{foreach \$(\S*) as \$(\S*) => \$(\S*)\}
\{loop="\\$$1" as \\$$1 as \\$$2\}
\{foreach \$(\S*) as \$(\S*)\}
\{loop="\\$$1" as \\$$2\}
\{/foreach\}
\{/loop\}
\{([a-zA-Z]*)\((.*?)\)\}
\{function="$1($2)"\}
\{\((.*?)\)\|(\S*?)\}
\{$1|$2\}
모두 치환 한 뒤에는 직접 하나하나 보면서 처리해야할 부분들이 많다. 특히 변수의 사용에 있어서 복잡한 수식이나 함수의 사용이 있을 경우 ({$test->func($variable*100)}
등) 직접 손으로 수정해야할 코드가 많다.
특히 Smarty 와 비슷한 연산자인 | 와 : 를 사용해 함수를 쓰는 부분에서는 Smarty 와 약간 동작을 다르게 하고 있다. Smarty 의 경우에는 | 의 바로 왼쪽에 있는 token 을 대상으로 연산, raintpl 은 {으로부터 시작해 | 의 바로 왼쪽까지 있는 코드를 모두 연산한다.
예를들어 $var 이 10
일 때,
- (Smarty) {$var*0.7|round} : 10
- (Raintpl3) {$var*0.7|round} : 7
또 Smarty 에 존재하던 {include "filename" variable1=$variable}
와 같이 인라인으로 변수를 할당하는 문법이 존재하지 않으므로 수동으로 위에서 지정해줘야하며, 또 역시 이로 인한 버그가 존재 할 수 있다.
Smarty
{$var="2"}
{$var}
{include "file.tpl" $var="1"}
{$var}
Result
2
2
Raintpl3
{$var="2"}
{$var}
{$var="1"}
{include="file"}
{$var}
Result
2
1
위의 소스만을 보고 판단하면 당연한 결과지만, 보통 {$var="2"}
을 소스의 아주 윗 부분이나 혹은 php 에서 assign 하여 사용하던 변수일 경우가 많으므로, 이런 버그가 생길 가능성은 충분히 크다. (issue on github)
발견한 버그
{loop="$array" as $key => $someValue}
이렇게 key 변수를 $key로 지정해주면 버그가 생김. ($key는 기본값임) (issue on github)