phpsource/템플릿2006. 11. 3. 13:25
written: Nov 03 2006
[버전1.2.0 제안서] 여기서 기술한 내용은 확정된 용법이 아니라 다음 버전을 발표할 때까지 여러분의 의견 수렴을 통해 더 검토되어야 하는 제안서(proposal)로 문법적인 내용이 다소 변경될 수 있음을 미리 밝혀둡니다.
다음 버전부터는 필터 기능을 지원하지 않습니다. 필터기능은 다른 방법으로 단순화시켜 제공할 생각입니다.
1.1.1 버전까지 사용하던 초기값에 해당하는 것이 필터 상수입니다. 초기값은 0.0.3 버전부터 지정할 수 있습니다.
필터상수 설정
0.0.3 ~ 1.1.1 버전까지의 초기값 설정
0.0.3 버전부터는 템플릿 문서(템플릿 파일, 템플릿 문자열) 내에서 템플릿 변수에 대한 초기값(default)을 설정할 수 있습니다.
{ROW::이곳에 초기값을 설정}
반복문을 사용하는 경우의 예를 들어보면 다음과 같습니다.
{ROW:5-7:이곳에 초기값을 설정하면 \{ROW.5\}부터 \{ROW.7\}까지 모든 템플릿 변수에 초기값이 할당됨}
1.2.0 버전의 필터 상수 설정
콜론(:) 대신에 세미콜론(;)으로 변수명과 필터상수를 구분합니다.
{ROW;;이곳에 필터상수를 설정}
반복문을 사용하는 경우의 예를 들어보면 다음과 같습니다.
{ROW;5-7;이곳에 필터 상수를 설정하면 \{ROW.5\}부터 \{ROW.7\}까지
모든 템플릿 변수에 상수값이 할당됨}
조건변수(스위치문)을 사용하는 경우의 예를 들어보면 다음과 같습니다.
{변수명;;2, 사과 | 배 | 오렌지}
{?변수명;;2} 사과 | 배 | 오렌지 {/}
{?변수명;;2} {%사과%} {%배%} {%오렌지%} {/}
필터상수의 실행시간
필터 상수는 템플릿 문서를 컴파일할 때  그 값이 처리되어 캐시에 저장됩니다. 따라서 다른 필터 명령과는 달리 그 값을 php 문서에서 임의로 변경할 수 없다는 의미에서 상수라고 표현하였습니다.

Posted by 방글24
phpsource/템플릿2006. 11. 2. 11:02
written: Jan 28 2002
last modified: Nov 02 2006
후키템플릿은 기본적으로 미리 정의되어 제공되는 템플릿 변수들이 있습니다. 이 템플릿 변수들은 PHP에서 제공되는 수퍼 글로벌 변수(superglobals)와 관련되어 있습니다.
수퍼 글로벌 변수
_SERVER
PHP에서 제공되는 수퍼 글로벌 변수 $_SERVER(또는 $HTTP_SERVER_VARS)는 웹서버에 의해 설정된 환경변수 또는 현재의 스크립트 문서의 실행환경과 관계된 변수들입니다. 수퍼 글로벌 변수 $_SERVER에 의해 제공되는 환경변수들은 웹문서를 작성하는데 필요로 하는 다양한 정보를 담고 있기 때문에 충분히 이해할 필요가 있습니다.
< 생성된 템플릿 변수 목록 >
PHP 변수명 템플릿 변수명 변수값 예
$_SERVER ['DOCUMENT_ROOT'] {_SERVER.DOCUMENT_ROOT} /usr/apache/htdocs
$_SERVER ['HTTP_HOST'] {_SERVER.HTTP_HOST} hosting11.interpia98.net
$_SERVER ['REMOTE_ADDR'] {_SERVER.REMOTE_ADDR} 218.232.68.40
$_SERVER ['REMOTE_PORT'] {_SERVER.REMOTE_PORT} 2111
$_SERVER ['SCRIPT_FILENAME'] {_SERVER.SCRIPT_FILENAME} /my/public_html/t.php
$_SERVER ['REQUEST_URI'] {_SERVER.REQUEST_URI} /~my/t.php?tt=sample
$_SERVER ['SCRIPT_NAME'] {_SERVER.SCRIPT_NAME} /~my/t.php
$_SERVER ['PHP_SELF'] {_SERVER.PHP_SELF} /~my/t.php
위의 목록은 수퍼 글로벌 변수 $_SERVER에서 제공하는 모든 환경변수를 나타내지는 않았습니다. 더 자세한 환경변수에 대하여 관심이 있으면 관련 서적이나 phpinfo() 함수를 사용하여 살펴보시기 바랍니다.
$_SERVER의 환경변수 중에서 "GLOBALS"와 "HTTP_COOKIE"는 템플릿 변수를 생성하지 않고 무시해 버립니다. "GLOBALS"는 PHP 전역변수를 나타내는 것으로 이를 허용하기에는 불필요하게 덩치가 커지게 되며 또한 구현상 약간의 문제가 있어 제외시켰습니다. "HTTP_COOKIE"는 쿠키 정보를 나타내는 것으로 아래에서 설명할 수퍼 글로벌 변수 $_COOKIE와 중복되는 부분이라서 $_SERVER 정보에서는 제외시켰습니다.
수퍼 글로벌 변수 $_SERVER은 PHP 4.2.0부터 제공되는 것으로 이전 버전에서는 $HTTP_SERVER_VARS로 제공됩니다. $HTTP_SERVER_VARS 변수가 PHP 4.2.0에서도 제공되기는 하지만 향후 버전에서의 호환성을 보장하지 않으며 언젠가는 없어질 것으로 보입니다.
그러나 템플릿 변수 {_SERVER......}는 PHP 버전에 관계없이 동일하게 제공됩니다.
위의 환경변수 중에 PHP_SELF의 경우는 실행될 스크립트에 대한 가상 경로를 나타내는 것으로 현 문서에 대한 링크를 표시할 때 많이 사용하고 있습니다. 아래는 이와 관련된 템플릿 변수 {_SERVER.PHP_SELF}을 템플릿 파일에 응용하는 예입니다.
[code html;gutter:false] <A href="{_SERVER.PHP_SELF}?tt=board&tb=PhpclassQnA">물어보세요</A> [/code]
사실 이를 사용자가 직접 PHP 코딩한다는 것은 무척 귀찮은 일입니다. 아시다시피 PHP 4.2.0 부터는 기본적으로 predefined 변수의 경우 global 스코프를 지원하지 않습니다. 즉 $PHP_SELF라는 전역변수를 지원해 주지 않으며 이 변수를 사용하기 위해서는 수퍼 글로벌 변수 $_SERVER를 통해야만 합니다. 이로 인해 PHP 4.2.0 이전 버전에서 잘 동작되는 홈페이지가 PHP 4.2.0 버전으로 업그레이드한 후에 갑자기 동작되지 않는 경험을 많이 하셨을 것입니다.
이는 PHP 개발자가 보안상의 이유로 php.ini의 설정치 register_globals의 값을 off로 개선(?)하였기 때문입니다. 따라서 이전처럼 전역변수 $PHP_SELF를 사용하려면 register_globals의 값을 on으로 수정한 후 php를 다시 실행하세요. 그러나 php.net에서는 보안상 register_globals의 값을 off로 놓고 사용할 것을 추천하네요. 그러니 다소 불편하더라도 보안을 위해 전역변수 대신에 수퍼 글로벌 변수를 이용하는 것이 좋겠지요?
후키템플릿에서는 PHP 버전에 관계없이, 또  register_globals의 설정값에 관계없이 알아서 {_SERVER.PHP_SELF} 값을 지정해 줍니다. 물론 PHP_SELF 외의 다른 환경변수들도 같은 방법으로 지원하지요.
_ENV
PHP에서 제공되는 수퍼 글로벌 변수 $_ENV(또는 $HTTP_ENV_VARS)는 PATH와 같은 환경에 관련된 스크립트에 제공되는 변수들입니다.
< 생성된 템플릿 변수 목록 >
PHP 변수명 템플릿 변수명 변수값 예
$_ENV['PATH'] {_ENV.PATH} /sbin:/bin:/usr/sbin:/usr/bin
$_ENV['COMSPEC'] {_ENV.COMSPEC} C:\\WINDOWS\\COMMAND.COM
$_ENV['SHELL'] {_ENV.SHELL} /bin/bash
위의 목록은 수퍼 글로벌 변수 $_ENV에서 제공하는 모든 변수를 나타내지는 않았습니다. 서버 환경에 따라 제공되는 변수들이 많이 상이합니다. 그러니 현재 웹서버에서 제공되는 변수들을 알고 싶으면 phpinfo() 함수를 사용하여 살펴보시기 바랍니다.
_GET
HTML 폼이 HTTP GET 방식으로 PHP 스크립트로 전송(submit)되었을 때 폼에 있는 모든 내용들이 수퍼 글로벌 변수 $_GET(또는 $HTTP_GET_VARS)에 저장되어 넘어옵니다.
후키템플릿에서는 넘어온 수퍼 글로벌 변수 $_GET(또는 $HTTP_GET_VARS)의 값을 {_GET......} 형태로 된 템플릿 변수로 미리 정의하여 템플릿 파일에 넘겨줍니다.
예를 들어 템플릿문서가 아래와 같을 때 $_GET["tt"]의 값이 "sample"이고 현 스크립트 문서를 나타내는 $_SERVER["PHP_SELF"] 변수가 '/~my/test.php'라고 가정하지요.
[code html;gutter:false] <A href="{_SERVER.PHP_SELF}?tt={_GET.tt}">링크</A> [/code]
위의 템플릿 문서를 후키템플릿으로 해석한 후 output() 함수로 생성된 HTML 문서는 아래와 같습니다.
[code html;gutter:false] <A href="/~my/test.php?tt=sample">링크</A> [/code]
_POST
HTML 폼이 HTTP POST 방식으로 PHP 스크립트로 전송(submit)되었을 때 폼에 있는 모든 내용들이 수퍼 글로벌 변수 $_POST(또는 $HTTP_POST_VARS)에 저장되어 넘어옵니다.
후키템플릿에서는 넘어온 수퍼 글로벌 변수 $_POST(또는 $HTTP_POST_VARS)의 값을 {_POST......} 형태로 된 템플릿 변수로 미리 정의하여 템플릿 파일에 넘겨줍니다.
예를 들어 $_POST["tt"]의 값이 'sample'라면 템플릿 변수 {_POST.tt}를 정의하여 그 값을 'sample'로 지정하여 줍니다.
_FILES
PHP에서 제공되는 수퍼 글로벌 변수 $_FILES(또는 $HTTP_POST_FILES)는 HTTP POST 파일 업로드할 때 업로드하는 파일 정보를 담는데 사용됩니다.
[code html;gutter:false] <FORM action="file-upload.php" method="post" enctype="multipart/form-data"> Send this file: <INPUT type="file" name="upfile"> <INPUT type="submit" value="Send files"> </FORM> [/code]
예를 들어 위와 같은 HTML 폼을 통해 파일 'Autoexec.bat'를 업로드를 하게 되면 file-upload.php 문서로 넘어오는 수퍼 글로벌 변수 $_FILES의 값은 아래와 같습니다(각 항목의 값은 시스템 상황에 따라 다른 값이 나타날 수 있습니다).
[code php;gutter:false] $_FILES['upfile'] = array( 'name' => 'Autoexec.bat', 'type' => 'application/octet-stream', 'tmp_name' => 'c:\apache\php10D5.TMP', 'size' => 177 ) [/code]
수퍼 글로벌 변수 $_FILES(또는 $HTTP_POST_FILES)의 값은 아래와 같이 미리 정의된 템플릿 변수를 생성하여 주게 됩니다.
< 생성된 템플릿 변수 목록 >
PHP 변수명 템플릿 변수명 변수값 예
$_FILES['upfile']['name'] {_FILES.upfile.name} Autoexec.bat
$_FILES['upfile']['type'] {_FILES.upfile.type} application/octet-stream
$_FILES['upfile']['tmp_name'] {_FILES.upfile.tmp_name} c:\apache\php10D5.TMP
$_FILES['upfile']['size'] {_FILES.upfile.size} 177
(참고) 만약 php.ini 파일에 있는 register_globals의 값이 on으로 설정되어 있다면 HTML 폼으로부터 넘어 오는 파일정보는 수퍼 글로벌 변수 $_FILES와 함께 전역변수 $upfile_name, $upfile_type, $upfile, $upfile_size에 담겨져 있을 것입니다.
_COOKIE
PHP에서 제공되는 수퍼 글로벌 변수 $_COOKIE(또는 $HTTP_COOKIE_VARS)를 통해 원격 브라우저에 저장된 쿠키 데이터를 웹문서에 전달합니다.
후키템플릿에서는 전달된 수퍼 글로벌 변수 $_COOKIE(또는 $HTTP_COOKIE_VARS)의 값을 {_COOKIE......} 형태로 된 템플릿 변수로 미리 정의하여 템플릿 파일에 넘겨줍니다.
< 생성된 템플릿 변수 목록 >
PHP 변수명 템플릿 변수명 변수값 예
$_COOKIE ['PHPSESSID'] {_COOKIE.PHPSESSID} d3e808b889a06fe3a3ab4b4ba462ad46
_SESSION
PHP에서 제공되는 수퍼 글로벌 변수 $_SESSION(또는 $HTTP_SESSION_VARS)를 통해 서버에 저장된 세션 정보를 웹문서에 전달합니다.
후키템플릿에서는 전달된 수퍼 글로벌 변수 $_SESSION(또는 $HTTP_SESSION_VARS)의 값을 {_SESSION......} 형태로 된 템플릿 변수로 미리 정의하여 템플릿 파일에 넘겨줍니다.
::_PATH_TO_TPLS
1.1.0 버전부터 제공되는 멤버 템플릿변수로 현재 템플릿 파일의 PHP 스크립터 문서에 대한 상대경로가 기록되어 있습니다.
멤버템플릿변수 {::_PATH_TO_TPLS} 를 이용한 리소스 리디렉션 처리
예를들어 아래와 같이 경로중에 템플릿변수가 포함되어 있는 경우에도 정상적으로 동작하기 위해서는 리소스 리디렉션해 주어야 합니다.
[code html;gutter:false] <IMG src="images/{HEAD_IMG}"> [/code]
 
그러나 프로그램에서는 'src' 속성을 평가하여 실제로 해당파일이 없는 경우에는 리소스 리디렉션을 하지 않습니다. 그렇다고 파일이 없는 경우까지도 리디렉션하게되면 아래와 같은 경우에 문제가 발생합니다.
[code html;gutter:false] <A onmouseover= "menu1.src='images/btn_home_up.gif';showContents('layer_submenu1')" >...</A> [/code]
 
'images/btn_home_up.gif'은 './templates/images/btn_home_up.gif'와 같이 리디렉션되는 것이 정상적이지만 'layer_submenu1'도 './templates/layer_submenu1'와 같이 원치않는 리디렉션이 일어납니다.
리소스 URL에 템플릿변수를 사용할 경우에는 템플릿 디렉토리를 나타내는 멤버템플릿변수 {::_PATH_TO_TPLS}를 이용합니다.
[code html;gutter:false] <IMG src="{::_PATH_TO_TPLS}/icons/{HEAD_IMG}"> [/code]
 
위와 같이 표기할 수 있습니다. 멤버템플릿변수 {::_PATH_TO_TPLS}에는 현재 php문서(_SERVER.PHP_SELF)를 기준으로 현재의 템플릿문서파일의 상대경로를 기록되어 있습니다.
예를들어, 아래와 같이 php문서와 이 문서에서 사용하고 있는 2개의 템플릿문서가 있습니다.
+- test.php
|
+- tpl1 --- test1.htm
+- tpl2 --- test2.htm
 
템플릿문서 test1.htm과 test2.htm의 내용에는 모두 아래와 같은 내용이 포합되어 있습니다.
[code html;gutter:false] <IMG src="{::_PATH_TO_TPLS}/icons/{HEAD_IMG}"> [/code]
 
이럴 때 test1.htm의 멤버템플릿변수 {::_PATH_TO_TPLS}에는 './tpl1'이 기록되어 있고, test2.htm의 멤버템플릿변수 {::_PATH_TO_TPLS}에는 './tpl2'가 기록되어 있습니다.
_VARIABLE
1.1.1 버전에서 추가된 템플릿변수로 템플릿 파일 내에서 템플릿변수를 정의하기 위하여 사용됩니다.
{@_VARIABLE}
{var1::템플릿에서 할당된 변수 var1}
{var2::템플릿에서 할당된 변수 var2}
{var3::템플릿에서 할당된 변수 var3}
{var4::템플릿에서 할당된 변수 var4}
{/_VARIABLE}
위와 같이 다이나믹블록명 '_VARIABLE' 안에 템플릿 문서에서 사용할 템플릿변수를 정의하여 사용할 수 있습니다.
'_VARIABLE' 키워드로 지정된 블록은 복수의 템플릿 파일에서 동시에 사용할 수 있으며 브라우저에는 블록안의 내용이 출력되지 않습니다. 또한 그 안에 있는 내용은 템플릿변수에 대한 정보를 제외한 모든 코드가 컴파일 과정에서 삭제됩니다.
1.1.1 버전에서도 '_VARIABLE' 키워드를 사용하지 않고 일반적인 다이나믹블록으로도 템플릿변수 정의가 가능하기는 하지만 템플릿 파일마다 블록명을 다르게 설정하여야 하고 불필요한 코드가 캐시에 남아있게 됩니다.
그러나 향후 버전에서는 블록에서의 '_VARIABLE' 키워드 이외에는 그 호환성을 보증하지 않습니다. 주의해서 사용하시기 바랍니다.
블록에서의 템플릿변수 정의는 아래와 같은 형식으로 사용하면 됩니다.
{@_VARIABLE}{변수명::초기값}...{/_VARIABLE} 또는

<!--BEGIN DYNAMIC BLOCK: _VARIABLE -->
{변수명::초기값}...
<!-- END DYNAMIC BLOCK: _VARIABLE  -->
 
블록 _VARIABLE 내에 정의된 템플릿변수는 멤버 템플릿변수로 정의하여도 되고 반복문을 사용하여도 됩니다. 그러나 스위치문 등과 같이 나중에 PHP 스크립트에서 작업해야 하는 기능 등은 사용할 수 없습니다.
템플릿파일에 위와같이 템플릿변수를 정의해 놓으면 PHP 스크립트에서 별도로 해당 변수를 할당할 필요없이 템플릿 문서 아무데서나 정의된 변수를 사용하면 됩니다. 만약 템플릿파일에서 정의된 변수를 PHP 스크립트에서 사용할 필요가 있을 때는 get_assigned() 멤버를 이용하시면 됩니다.
블록 _VARIABLE 내에 멤버템플릿변수 정의하기
1.1.2 버전에서 추가되는 기능으로 아래와 같이 블록 _VARIABLE 내에서 멤버템플릿변수를 정의할 수 있습니다.
{@_VARIABLE}
{::var5::템플릿에서 할당된 변수 var5}
{/_VARIABLE}
 
_VERSION
1.1.2 버전에 추가된 템플릿변수로 후키템플릿 버전을 나타냅니다.
_SELF, _SELF.contents, _SELF.name
필터명령 내에서만 사용되는 템플릿변수들입니다.
{@BLOCK_VAR;;="{_SELF}";}블록변수의 초기내용{/}
템플릿변수 {_SELF}는 현재 변수가 저장하고 있는 변수내용을 의미합니다.
< 필터명령에서 사용되는 템플릿변수 _SELF >
기 능 템플릿 변수명 변수값 예
템플릿변수값 {_SELF} {_SELF.contents} 블록변수의 초기내용
템플릿변수명 {_SELF.name} BLOCK_VAR
필터명령 문장속에서의 이 변수의 정확한 표기법은 php 문장에서 변수 $_SELF를 사용하는 것처럼 사용하면 됩니다. 그렇다고해서 템플릿변수 {_SELF} 대신에 전역변수 $_SELF를 대신 쓸수는 없으며 단지 표기하는 방법만 동일하다는 의미입니다. 아래는 템플릿변수 {_SELF}를 잘못 사용한 경우의 예입니다.
{#FILEVAR;;='{_SELF}';}./include.htm{/}
{#FILEVAR;;="{_SELF}tailing...";}./include.htm{/}
위의 예는 마치 php 문장에서 전역변수 $_SELF를 아래와 같이 사용하면 정상적으로 동작하지 않는 것과 같습니다.
$TMPT = '$_SELF';
$TMPT = "$_SELFtailing...";
기타 미리 정의된 템플릿 변수
향후 필요하다면 {_TEMPLATE......} 형태(형편에 따라 변경될 수도 있음)로 추가하겠습니다.

Posted by 방글24
phpsource/템플릿2006. 11. 2. 10:42
written: Jan 28 2002
last modified: Nov 02 2006
사용방법
템플릿 파일 내에 하위템플릿을 포함하는 복잡한 구조의 템플릿을 구성하는 경우를 살펴보겠습니다.
이러한 경우에는 인클루드하려는 하위템플릿 파일을 상위템플릿 파일 내에 <!--#include file="하위템플릿파일명"--> 또는 {#하위템플릿파일명}와 같이 표기합니다. 이와 같이 변수내용을 별도의 파일로 작성되어 컴파일할 때 변수내용을 읽어들이도록 작성된 템플릿 변수를 파일변수(인클루드문)라고 합니다.
<!--#include file="파일명"-->
{#파일명}
<!--#include file="하위템플릿파일명"--> 표기법은 SSI(Server Side Include) 문법으로 서버(HTTPd)에서 처리되는 태그입니다. 이 표기법의 장점은 드림위버에서 편집할 때 인클루드되는 파일을 함께 보며 작업할 수 있다는 것입니다.
구문 형식의 확장
1.2.0 버전부터 {#변수명}파일명{/}와 같은 구문형식을 사용할 수 있으며, 이전 버전에서 사용하던 {#파일명}도 앞으로도 계속 사용할 수 있습니다.
{#변수명;변수옵션;필터명령}파일명{/}
변수옵션과 필터명령은 1.2.0 버전부터 사용할 수 있습니다. {#변수명}파일명{/} 형식과 {#파일명} 형식을 구분하는 기준은 {#string} 에서 string이 실제로 존재하는 파일명이면 {#파일명} 형식으로 처리하고 존재하지 않는 파일명이면 {#변수명}파일명{/} 형식으로 처리합니다.
하위 템플릿 파일의 경로
하위템플릿 파일 include.htm은 템플릿 변수가 포함되어 있는 또 다른 템플릿 파일입니다. 하위템플릿의 경로는 현재 템플릿 문서에 대한 상대경로로 지정됩니다. 단, 상위디렉토리는 지정할 수 없습니다.
<!--#include file="sub/sub_include.htm"--> 또는
<!--#include file="./sub/sub_include.htm"--> 또는
{#sub/sub_include.htm} 또는
{#./sub/sub_include.htm} 또는
{#}./sub/sub_include.htm{/} 또는
{#}sub/sub_include.htm{/}
아래와 같이 절대경로를 지정할 수도 있습니다.
<!--#include file="/other-templates/include.htm"--> 또는
{#/other-templates/include.htm} 또는
{#}/other-templates/include.htm{/}
복잡한 구조의 템플릿 파일의 예
아래의 예는 최상위 템플릿 파일 "Main.htm"을 기점으로 연속적으로 수많은 하위템플릿 파일이 인클루드되어 있는 경우입니다.
< 그림1 템플릿 파일의 구성 >
이러한 경우의 각 템플릿 파일의 내용이 아래와 같다고 하지요.
최상위 템플릿 파일 Main.htm 내용:

main.htm
+----<!--#include file="include-1.htm"-->
+----<!--#include file="include-2.htm"-->


하위 템플릿 파일include-1.htm 내용:

include-1.htm

하위 템플릿 파일include-2.htm 내용:

include-2.htm
.....+----<!--#include file="include-21.htm"-->
.....+----<!--#include file="include-22.htm"-->


하위 템플릿 파일include-21.htm 내용:

include-21.htm
..........+----<!--#include file="include-211.htm"-->
..........+----<!--#include file="include-212.htm"-->


하위 템플릿 파일include-22.htm 내용:

include-22.htm

하위 템플릿 파일include-211.htm 내용:

include-211.htm
...............+----<!--#include file="include-2111.htm"-->
...............+----<!--#include file="include-2112.htm"-->


하위 템플릿 파일include-212.htm 내용:

include-212.htm

하위 템플릿 파일include-2111.htm 내용:

include-2111.htm
....................+----<!--#include file="include-21111.htm"-->
....................+----<!--#include file="include-21112.htm"-->


하위 템플릿 파일include-2112.htm 내용:

include-2112.htm

하위 템플릿 파일include-21111.htm 내용:

include-21111.htm

하위 템플릿 파일include-21112.htm 내용:

include-21112.htm
이제는 하위템플릿을 인클루드하기 위한 PHP 문서를 구성하여 보겠습니다.
[code php;gutter:false] <?php include_once('class.hTemplate.php'); $tpl = new hTemplate('./templates'); $tpl->define( array( 'main' => 'Main.htm' ) ); $tpl->assign('MAIN', 'main'); $tpl->output('MAIN'); ?> [/code]
최상위 템플릿 파일에 대하여 define(), assign(), output()를 순서대로 실행하게 되면 아래와 같은 결과가 브라우저에 표시될 것입니다.
< 그림2 실행 결과 >
하위템플릿 파일의 처리순서
하위템플릿 파일에서도 일반 템플릿 파일과 동일하게 모든 기능을 사용할 수 있습니다. 그러면 그림1과 같은 템플릿 구조에서 하위템플릿 파일에 포함된 템플릿변수에 값은 언제 할당될까요?
최상위 템플릿 파일에 해당하는 템플릿 main을 assign() 함수에서 처리할 때 그 하위에 있는 모든 템플릿을 먼저 처리하게 됩니다. 그림1과 같은 경우라면 assign 처리되는 순서는 아래와 같습니다.
include-1.htm
include-21111.htm
include-21112.htm
include-2111.htm
include-2112.htm
include-211.htm
include-212.htm
include-21.htm
include-22.htm
include-2.htm
Main.htm
위와 같이 최하위 템플릿을 가장 먼저 처리하며 최상위 템플릿을 가장 뒤에 처리하게 됩니다.
파일변수에서 파일명의 변수처리
1.2.0 버전부터는 파일명을 변수로 처리하기 위해서는 아래와 같이 단순변수의 필터명령을 이용할 수 있습니다.
{#varname}{=gText}{/}

Posted by 방글24