written: Jan 28 2002
last modified: Sep 20 2006
last modified: Sep 20 2006
템플릿 구조 정보 디버깅
개발과정에서 컴파일된 템플릿 구조 정보를 실시간으로 확인할 수 있는 디버깅 기능을 1.0.0 버전에 새로이 추가하였습니다.
이 기능을 이용하면 define() 메소드를 통해 템플릿 문서의 내용이 어떻게 컴파일되어 템플릿 구조로 저장되어 있나를 알 수 있으며 아울러 각 템플릿 문서별로 선언되어 있는 템플릿 변수의 초기 상태를 확인할 수 있습니다.
모든 템플릿 구조 정보를 출력할 때
define() 메소드에 의해 컴파일된 템플릿 구조 정보를 확인하려면 아래와 같이 output() 함수(1.2.0 이전 버전에서는 FastPrint() 함수)에 배열 인수로 "-template" 지정합니다.
[code php;gutter:false]
output(
array(
'-template'
)
);[/code]
그러면 이 문장이 나타난 행까지 define() 메소드에 의해 컴파일된 모든 템플릿 구조 정보를 아래와 같이 웹 브라우저에 출력해 줍니다.
템플릿 구조 정보는 크게 보면 template type, parent, child 등을 나타내는 헤더 정보와 group, subgroup, value를 나타내는 본문 정보로 구분됩니다. 헤더 정보와 본문 정보에 대한 자세한 것은 아래에서 별도의 항목으로 설명하겠습니다.
일부 템플릿 구조 정보만 출력할 때
만약 모든 템플릿 구조가 아닌 일부 템플릿 구조에 대하여만 보고싶다면 아래와 같이 보고싶은 템플릿명만을 명시적으로 지정하면 됩니다.
[code php;gutter:false]
$tpl->define('body', './templates-2/home.htm');
.
.
.
$tpl->output(
array(
'-template body'
)
);[/code]
"body"는 define() 메소드에서의 첫 번째 인수에 지시한 템플릿명을 의미합니다. 그러면 템플릿 파일 "./templates-2/home.htm"에 선언된 모든 템플릿 구조 정보를 아래와 같이 웹 브라우저에 출력해 줍니다.
헤더 정보
헤더 정보에는 아래와 같이 5가지 정보에 대하여 분류되어 나타납니다.
분 류 | 기 능 | 나타나는 값 |
---|---|---|
template type | 템플릿 형식 | FILE, NOFILE, BLOCK, INCLUDE |
parent | 부모 템플릿명 | (예)main |
child | 자식 템플릿명 | (예)block_info_menu |
template file | 템플릿 파일명 | (예)./templates/main.htm |
filemtime | 템플릿 파일의 최종 수정시간 | (예)2003년 03월 27일 12:02:52 |
템플릿 형식(template type)
1.0.0 버전에서 나타날 수 있는 템플릿 형식은 "FILE", "NOFILE", "BLOCK", "INCLUDE"입니다.
"FILE"은 템플릿 파일로부터 컴파일된 템플릿 구조 정보임을 나타냅니다. 아래와 같은 경우를 살펴보면 템플릿 구조 정보 "main"의 템플릿 형식은 "main.htm"으로부터 컴파일되었으므로 "FILE"로 나타납니다.
[code php;gutter:false]
$tpl->define('main', 'main.htm');[/code]
"NOFILE"은 rFastTemplate의 define_raw()와 같이 템플릿 구조 정보가 템플릿 파일이 아닌 문자열로부터 얻었음을 나타냅니다. 이러한 기능을 후키템플릿에서는 no-file 용법이라 부르며 자세한 것은 "define()" 메뉴를 참조바랍니다.
"BOLCK"은 블록변수(다이나믹 블록)로부터 분리된 템플릿 구조 정보를 의미합니다. 예를 들어 아래와 같은 블록변수(다이나믹 블록)가 템플릿 파일 "main.htm"에 포함되어 있다고 가정하겠습니다.
[code html;gutter:false]
<!-- BEGIN DYNAMIC BLOCK: block_info_menu -->
{CONTENTS}
<!-- END DYNAMIC BLOCK: block_info_menu -->[/code]
이 때 템플릿 파일 "main.htm"을 define() 메소드를 이용하여 컴파일하게 되면 아래 <그림3>에서와 같은 템플릿 구조 정보 "block_info_menu"에 대한 결과를 얻을 수 있습니다.
"INCLUDE"는 파일변수(인클루드문)로부터 분리된 템플릿 구조 정보를 의미합니다.
부모 및 자식 템플릿(parent & child template)
예를 들어 아래와 같은 블록변수(다이나믹 블록)가 템플릿 파일 "main.htm"에 포함되어 있다고 가정하겠습니다.
[code html;gutter:false]
<!-- BEGIN DYNAMIC BLOCK: sub-1 -->
<!-- BEGIN DYNAMIC BLOCK: sub-2 -->
<!-- BEGIN DYNAMIC BLOCK: sub-3 -->
<!-- BEGIN DYNAMIC BLOCK: sub-4 -->
<!-- BEGIN DYNAMIC BLOCK: sub-5 -->
{CONTENTS}
<!-- END DYNAMIC BLOCK: sub-5 -->
<!-- END DYNAMIC BLOCK: sub-4 -->
<!-- END DYNAMIC BLOCK: sub-3 -->
<!-- END DYNAMIC BLOCK: sub-2 -->
<!-- END DYNAMIC BLOCK: sub-1 -->[/code]
이 때 템플릿 파일 "main.htm"을 define() 메소드를 이용하여 아래와 같이 컴파일하였다고 가정합니다.
[code php;gutter:false]
$tpl->define('main', 'main.htm');[/code]
컴파일 후 템플릿 구조 정보에 대하여 디버깅하면 각 템플릿 "main", "sub-1", "sub-2", "sub-3", "sub-4", "sub-5"에 나타나는 부모 및 자식 템플릿 명을 아래와 같습니다.
템플릿 | 템플릿 형식 | 부모 템플릿 | 자식 템플릿 |
---|---|---|---|
main | FILE | 없음 | sub-1 |
sub-1 | BLOCK | main | sub-2 |
sub-2 | BLOCK | sub-1 | sub-3 |
sub-3 | BLOCK | sub-2 | sub-4 |
sub-4 | BLOCK | sub-3 | sub-5 |
sub-5 | BLOCK | sub-4 | 없음 |
이와 같이 템플릿 구조 정보는 양방향성을 가진 Linked List 구조로 되어있습니다.
템플릿 파일(template file)
이 정보는 템플릿 형식이 "FILE"인 경우에만 나타나며, 컴파일된 템플릿 파일명을 나타냅니다.
템플릿 파일의 최종 수정시간(template file's modification time)
이 정보는 템플릿 형식이 "FILE"인 경우에만 나타나며, 컴파일된 템플릿 파일이 최종적으로 수정된 시간을 나타냅니다. 캐시에 있는 이 시간과 실제 템플릿 파일의 수정시간을 비교하여 캐시의 갱신여부를 결정합니다.
본문 정보
첫 행 group은 템플릿 구조 정보를 <!DOCTYPE> 태그 내용, <HEAD>~</HEAD>의 내용, <BODY> 태그 속성 내용, <BODY>~</BODY>의 내용으로 분류하여 보여줍니다.
본문 정보에는 아래와 같이 4가지 정보에 대하여 대분류(group)되어 나타납니다. 이 외에도 후키템플릿의 내부에서만 사용되는 내부 정보가 있으나 내부 정보는 디버깅할 때 나타나지 않습니다.
group 분류 | 기 능 | subgroup 분류 |
---|---|---|
doctype_tag | <!DOCTYPE> 태그 내용 | *reserved |
head_contents | <HEAD>~</HEAD> 사이의 내용 | TITLE META_content-type META_author META_keywords META_description LINK_속성 href의 값 SCRIPT SCRIPT_속성 scr의 값 STYLE |
body_tag | <BODY> 태그의 속성값 | topmargin leftmargin marginwidth marginheight 기타 <BODY> 태그의 속성명 |
body_contents | <BODY>~</BODY> 사이의 내용 | html source, variable |
doctype_tag
<!DOCTYPE> 태그 내용을 나타내며 템플릿 파일에 있는 내용 그대로 값으로 저장됩니다. subgroup은 없으며 value 항목에는 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">와 같이 태그 내용을 그대로 가지고 있습니다.
<!DOCTYPE> 태그가 2개 이상의 템플릿 파일에서 나타나는 경우에는 처음 나타나는 <!DOCTYPE> 태그 내용만 유효하며 나머지는 무시됩니다.
head_contents
group "head_contents"는 <HEAD>~</HEAD> 사이의 내용을 나타내며 그 내용이 다시 TITLE, META, LINK, SCRIPT 별로 분류되어 저장됩니다. META 태그는 속성 name값을 덧붙여 subgrouping하며, LINK는 속성 href값을 덧붙여 subgrouping합니다. 그 외에도 subgroup은 태그 종류에 따라 다양하게 나타나게 됩니다.
body_tag
group "body_tag"는 <BODY> 태그 속성 내용을 나타내며 subgroup은 <BODY> 태그의 속성명으로 분류됩니다. 여러개의 파일에서 속성이 중복되어 나타나는 경우에는 처음 나타나는 속성에 대하여만 유효하며 나머지는 무시됩니다.
body_contents
마지막 group인 "body_contents"는 <BODY>~</BODY>의 내용을 나타내며 대부분 가장 많은 내용을 담고 있으며 템플릿 구조 정보의 가장 핵심적인 내용이라 할 수 있습니다. 다른 group과는 달리 기록하는 방법이 좀 특이합니다.
<BODY>~</BODY> 사이의 내용이 템플릿 변수를 기준으로 그 내용이 분리되어 기록되기 때문에 "html source"와 "variable"이 계속 교차되어 나타납니다. 예를 들어 아래와 같은 템플릿 파일이 있다고 가정하겠습니다.
[code html;gutter:false]
<BODY>
<P>실험용 소스:{VALUE1}/{VALUE2}</P>
</BODY>[/code]
이 때 이 템플릿 파일을 define() 메소드를 이용하여 컴파일하게 되면 "body_contents"은 아래와 같이 나타날 것입니다.
위와 같이 body_contents 구조 정보는 HTML 소스와 템플릿 변수가 번갈아 가며 나타납니다.
위에서 <!--hwooky HTML Parser 1.2.0-->부분은 hHtmlParser 클래스를 이용하여 템플릿 파일을 파싱하는 과정에서 추가된 주석으로 원래 템플릿 파일에는 없는 내용입니다.
템플릿 변수의 초기값 상태
<그림4>을 보면 각 템플릿 파일마다 선언된 템플릿 변수들이 템플릿 구조 정보 하단에 나타나 있는 것을 볼 수 있습니다. 여기서 나타나는 템플릿 변수 정보는 템플릿 파일에 선언된 초기값을 보여줍니다. 앞에서 살펴보았지만 "-variable"를 가지고 출력되는 템플릿 변수 정보가 assign() 메소드로 할당된 결과를 보여주는 것과는 다르지요. 만약 assign() 메소드로 그 값을 변경한 일이 없다면 양 쪽에 나타나는 템플릿 변수의 값은 동일하겠지요.
[1.0.0 beta]각 템플릿 파일별로 선언된 템플릿 변수의 초기 상태는 캐시를 갱신할 때만 확인할 수 있습니다. 왜냐하면 캐시에는 각 템플릿 변수에 대한 초기 상태가 기록되지 않습니다. 각 템플릿 변수에 대한 초기 상태는 템플릿 파일을 갱신할 때만 임시로 생성되는 정보입니다.
따라서 템플릿 파일에 선언된 템플릿 변수의 초기 상태를 출력하고자 원한다면 디버깅할 때마다 반드시 캐시를 같이 갱신하시기 바랍니다. 즉, 후키 템플릿 객체를 생성할 때 지시하는 캐시정보에서 "update" 속성을 반드시 true로 설정든지 아니면 캐시 디렉토리에서 해당 캐시를 먼저 삭제하여야 합니다. 그렇지 않으면 해당 템플릿 파일에 존재하는 템플릿 변수는 나타나지 않고 템플릿 구조 정보만 나타납니다.
[1.0.0 정식버전]캐시 갱신 여부와 관계없이 각 템플릿 파일별로 선언된 템플릿 변수의 초기 상태를 확인할 수 있습니다.
'phpsource > 템플릿' 카테고리의 다른 글
{후키템플릿}3.1.제공 함수 목록 (0) | 2006.09.20 |
---|---|
{후키템플릿}2.4.템플릿 캐시 정보 (0) | 2006.09.20 |
{후키템플릿}2.2.템플릿 변수 정보 (0) | 2006.09.20 |
{후키템플릿}4.4.필터 환경 설정 (0) | 2006.09.15 |
{후키템플릿}8.2.필터 명령 (0) | 2006.08.02 |