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