IV. WORKING WITH DESIGNER
18. 주석
※ 꼬리말형 주석
명령어 |
의미 |
사용법 |
// |
변환시 태그내 '//' 이하문자 삭제 |
{ any_template_code // any_string } |
템플릿코드가 유효하지 않거나 이스케이프되었을 때는 삭제되지 않습니다.
꼬리말형 주석 예제 |
index.tpl |
<table>
<!--{@ list }-->
<tr>
<td>{start - .index_ }</td>
<td>{.title}</td>
</tr>
<!--{/ }-->
</table>
|
※ 블럭형 주석
명령어 |
의미 |
사용법 |
* |
변환파일에서 삭제됨 |
{* any_string *} |
블럭형 주석 예제 |
index.tpl |
<table>
<tr>
<td width="50px">
<!--{ template * expression / overflows + width50px }-->
</td>
<td width="250px">
{ width250px & is | enough }
</td>
</tr>
</table>
|
, , , 모두 유효한 템플릿 주석이며, 주석의 이스케이프방법은 레퍼런스에서 주석명령어를 참고하시기 바랍니다.
또한 템플릿의 첫번째 블럭형 주석은 아래에 설명될 매크로, 필터 등을 정의할 수 있는 영역입니다.
19. 매크로
명령어 |
의미 |
사용법 |
|
문자열 치환 정의 |
#define search_string replace_string |
템플릿 변환기가 템플릿 코드를 해석하기 전에, 매크로정의에 따라 문자열들을 치환합니다. 매크로는 템플릿 파일의 가장 처음 블럭형 주석에서만 정의할 수 있습니다.
index.tpl |
<div>Greeting</div>
|
>> output |
<span>Hello! Julia</span>
|
찾을 문자열, 바꿀 문자열 모두 따옴표로 감쌀 수 있고, 공백(공백, 탭, 줄바꿈)이 포함될 때는 반드시 따옴표처리합니다.
아래의 두 템플릿파일은 같은 변환파일로 변환됩니다.
index.tpl |
<!--{@ page}-->
<!--{? page.key_ == current }-->
[ {page.key_} ]
<!--{:}-->
<a href='{page.value_}'>[ {page.key_} ]</a>
<!--{/}-->
<!--{:}-->
-- no page --
<!--{/}-->
|
index.tpl |
[ {page.key_} ]
<a href='{page.value_}'>[ {page.key_} ]</a>
-- no page --
|
찾을 문자열, 바꿀 문자열 내에 다음의 이스케이프 문자열이 유효합니다.
escape sequences |
\\ \t \n \" \' \> |
은 에디터가 사용하는 줄바꿈문자에 해당하므로 \r 을 고려하지 않아도 됩니다. 위지윅에디터로 작업시 문자열에 "-->" 이 포함되면 안되므로 이 때 "--\>" 또는 "--\g" 로 사용할 수 있습니다.
20. 프리필터
템플릿 변환기는 "템플릿주석삭제 -> 매크로처리 -> 프리필터링 -> 템플릿변환 -> 포스트필터링 -> 변환파일저장" 의 순서로 작동합니다.
※ 아래와 같은 형식의 함수를 "prefilter.함수이름.php" 의 파일명으로 배포된 플러그인 디렉토리 내에 저장하면 필터함수로 사용할 수 있습니다.
prefilter.arrangeSpace.php |
<?php
function arrangeSpace($source, $tpl) {
...
return $source;
}
?>
|
프리필터함수는 템플릿주석삭제 및 매크로처리된 템플릿소스를 첫번째 인자로 받아, 가공해서 리턴합니다.
※ 프리필터를 사용하려면 $prefilter 속성에 사용할 필터함수이름을 지정합니다.
$tpl->prefilter = 'arrangeSpace';
여러 가지 필터링이 필요한 경우, 메서드명을 파이프 "|" 로 연결하면 순서대로 처리됩니다.
$tpl->prefilter = 'adjustPath | parseMySyntax | myFilter';
필터 메서드에 추가적인 인자값을 전달하려면 "&" 로 구분해서 지정합니다.
index.php |
$tpl->prefilter = "myFilter & value1 & value2 | adjustPath";
|
prefilter.myFilter.php |
<?php
function myFilter($source, $tpl, $arg1, $arg2) {
...
return $source;
}
?>
|
인자값에 & 또는 | 가 필요하다면 \&, \| 로 이스케이프해서 사용할 수 있습니다.
※ 첫번째 템플릿주석 내에서 명령어로 추가적인 필터설정을 할 수 있습니다.
<!--{*
#prefilter "parseMySyntax & bbslist | someSpecialFilter"
#define ...
*}-->
$prefilter |
|
>> result sequence |
"f1 | f2" |
" | " |
" | " |
"f1 | f2" |
"| | " |
"f1 | f2 | | " |
"f1 | f2" |
" | |" |
" | | f1 | f2" |
"f1 | f2" |
"" |
"" |
21. 상대경로 자동보정(프리필터)
필터명 |
의미 |
adjustPath |
템플릿파일내 상대경로를 절대경로로 변환 |
$tpl->prefilter = "adjustPath & css,js,jpg,jpeg,png,gif,swf";
지정된 확장자를 가진 상대경로를 변환하며, 상대경로는 템플릿파일의 위치를 기준으로 하므로, 템플릿파일을 브라우저나 위지윅에디터로 열었을 때도 이미지, 스타일시트 등이 적용됩니다.
인자를 지정하지 않으면 필터함수내의 기본값을 사용합니다.
예제 |
directory |
|
/ |
|
|
project |
|
|
|
include |
/project/www/intro/index.php |
<?php
include '/project/include/Template_.class.php';
$tpl= new Template_;
$tpl->template_dir= '/project/www/_global';
$tpl->compile_dir= '/project/include/compiles';
$tpl->prefilter= 'adjustPath';
$tpl->define('index', 'intro/intro.tpl');
$tpl->print_('index');
?>
|
/project/www/_global/intro/intro.tpl |
<img src="../_img/logo.gif">
<div style="background-image:url(img/back.gif)">
welcome!
'../_img/test.gif'
\"../_img/test.gif\"
\'../_img/test.gif\'
src=../_img/test.gif     ....not quoted
"\../_img/test.gif"     ....escaped
</div>
|
>>output |
<img src="/_global/_img/logo.gif">
<div style="background-image:url(/_global/intro/img/back.gif)">
welcome!
'/_global/_img/test.gif'
\"/_global/_img/test.gif\"
\'/_global/_img/test.gif\'
src=../_img/test.gif     ....not quoted
"../_img/test.gif"     ....escaped
</div>
|
상대경로 문자열이 큰 따옴표, 작은 따옴표, 또는 url() 로 묶여있는 경우에만 변환되며, 상대경로앞에 역슬래쉬 '\' 를 붙여서 이스케이프할 수 있습니다.
adjustPath 필터를 사용하여 이미지 서버를 분리하거나 웹서버의 리다이렉션과 연동하는 용도로 사용할 수 있습니다. 레퍼런스를 참고하시기 바랍니다.
22. 템플릿파일 분할
템플릿 분할 기능을 사용함으로써 여러 개의 템플릿을 한 파일에 작성할 수 있습니다.
다른 페이지에서 사용하는 템플릿들이 관련된 내용이거나, 작성한 템플릿의 일부만 다른 페이지에서 반복 사용하거나, 모두 한 페이지에서 출력되지만 시간차 출력을 하고자 할 때 사용할 수 있습니다.
명령어 |
의미 |
사용법 |
+ |
추가적인 변환파일 생성 |
{+ division_id } |
아래의 템플릿파일은 세 개의 변환파일을 만들게 됩니다.
layout.tpl |
<!--{+ head}-->
<html>
<body>
<div>Welcome!</div>
<!--{+ body}-->
<table>
<tr><td>menu</td><td>content</td></tr>
</table>
</body>
</html>
|
> layout.tpl.php |
<html>
<body>
<div>Welcome!</div>
<table>
<tr><td>menu</td><td>content</td></tr>
</table>
</body>
</html>
|
> layout.tpl.head.php |
<html>
<body>
<div>Welcome!</div>
|
> layout.tpl.body.php |
<table>
<tr><td>menu</td><td>content</td></tr>
</table>
</body>
</html>
|
분할기능을 사용할 때도 모든템플릿문법이 유효하고, 템플릿파일 상단에 매크로 또는 필터가 정의되어 있다면 분할된 변환파일에도 똑같이 적용됩니다.
분할된 템플릿파일을 사용하려면 PHP 파일에 다음과 같이 작성합니다.
index.php |
...
$tpl->define(array(
'header'=>'layout.tpl?head',
'body' =>'layout.tpl?body'
));
$tpl->print_('header');
flush();
...
...
...
$tpl->print_('body');
|
파일아이디와 분할아이디는 같아도, 달라도 되며, 기본변환파일인 layout.tpl.php 파일 역시 사용가능합니다.
|
|
|