written: Oct 16 2006
변수옵션 ctype을 이용하면 변수에 들어갈 내용의 형식을 지정할 수 있습니다.
내용형식의 종류
템플릿 변수의 내용형식은 1.2.0 버전부터 지정할 수 있으며, 지정할 수 있는 내용형식(contents type)은 "템플릿문서", "텍스트문서", "PHP문서" 3가지 종류로 변수옵션 "ctype"을 이용하여 아래와 같이 지정합니다.
템플릿문서일 때 {#변수명}파일명{/}
텍스트문서일 때 {#변수명;ctype=text}파일명{/}
PHP 문서일 때 {#변수명;ctype=php}파일명{/}
텍스트문서일 때 {#변수명;ctype=text}파일명{/}
PHP 문서일 때 {#변수명;ctype=php}파일명{/}
템플릿문서일 때는 ctype을 지정하지 않으며, 지정하지 않았을 때는 템플릿문서로 인식하여 처리합니다.
파일변수뿐만 아니라 다른 모든 변수에도 ctype을 지정할 수 있도록 했습니다. 각 변수마다 ctype기능이 동작하는 방식에 약간의 차이가 존재하며, 각 ctype에 따른 동작은 컴파일할 때 이루어집니다.
변수내용(파일변수인 경우에는 파일내용) 형식이 text인 경우에는 문장 내에 템플릿변수가 있더라도 템플릿변수로 처리하지 않고 템플릿 문서가 아닌 일반 문서처럼 인식합니다.
템플릿변수의 내용형식이 php일 경우에 주의할 점
변수내용(파일변수인 경우에는 파일내용) 형식이 php인 경우에는 아래와 같은 절차에 따라 그 내용이 처리된다.
① 파일변수인 경우에는 파일내용을 읽어 변수내용에 저장함
② 변수내용에 존재하는 템플릿변수를 처리함
③ 변수내용을 php 스크립트로 인식하여 처리하며 그 결과를 돌려받아 변수내용에 저장함
④ 이후는 ctype이 text인 경우와 처리방법이 동일함
② 변수내용에 존재하는 템플릿변수를 처리함
③ 변수내용을 php 스크립트로 인식하여 처리하며 그 결과를 돌려받아 변수내용에 저장함
④ 이후는 ctype이 text인 경우와 처리방법이 동일함
변수내용(파일변수인 경우에는 파일내용)은 완전한 php 스크립트 문장입니다. 일반 php 스크립트와의 차이점은 아래와 같이 문장 내에 템플릿변수가 존재할 수 있다는 것입니다.
[code php;gutter:false]
<?php
$contents = '템플릿버전은 {_VERSION}입니다.';
$contents = str_replace('템플릿버전', 'hTemplate 버전', $contents);
return $contents;
?>[/code]
조건변수(스위치문)에서는 경우의 수를 분리하기 전에 위에서 기술한 4단계 절차에 따라 먼저 변수내용을 처리한 후 이 결과값을 가지고 경우의 수를 분리하여 처리합니다.
지정된 php 문서의 시작과 끝에는 반드시 php 시작태그 <?php와 종료태그 ?>가 있어야 합니다.
템플릿문서를 {#;ctype=php}./test.php{/}라고 작성하였다면 php 문서 파일 test.php에는 아래와 같이 문서 시작과 끝부분에 시작태그와 종료태그를 반드시 지정하여야 합니다.
[code php;gutter:false]
<?php
/**
* filename : test.php
*/
return 'test.php';
?>[/code]
{#; ctype=php}./test.php{/}의 결과는 php 문서의 반환값 'test.php'입니다. 만약 php 문서 내에 print, echo와 같은 함수를 이용하여 브라우저로 전송하는 문자가 발생하면 반환값 대신에 print, echo로 출력한 값이 {#;ctype=php}./test.php{/} 위치에 들어가게 됩니다.
php 문서를 실행 중에 에러가 발생한 경우에도 print, echo로 출력한 것과 같이 발생한 에러메시지를 돌려받게 됩니다.
블록변수의 내용을 php 내용형식으로 지정한 예를 들어보면 아래와 같습니다.
[code php;gutter:false]
{@;ctype=php}
<?php
print '블록변수에 직접 php 문서를 삽입한 경우';
?>
{/}[/code]
위의 블록변수의 위치에는 print 함수로 출력한 '블록변수에 직접 php 문서를 삽입한 경우'가 들어갑니다.
GET 방식에 의해 php 문서로 변수 전달
파일변수의 내용형식이 php일 때 GET 방식에 의해 php 문서로 변수를 전달할 수 있습니다. 아래와 같이 php 문서 test.php 내에 GET 방식으로 전달받는 변수 $version이 있다고 가정하겠습니다.
[code php;gutter:false]
<?php
return "템플릿버전은 $version입니다.";
?>[/code]
위 문서는 php.ini 파일의 옵션 register_globals이 on(또는 1)으로 설정되었을 때에만 정상적으로 $version의 값을 돌려받을 수 있습니다. 만약 register_globals이 off(또는 0)로 설정되어 있다면 $version 대신에 $_GET['version']라고 기술해야 합니다.
이와 같은 php 문서의 GET 변수 $varsion의 값을 아래와 같이 템플릿문서 파일변수의 파일명에 GET 방식으로 전달할 수 있습니다.
[code php;gutter:false]
{#SAMPLE;ctype=php}./test.php?version=1.2.0-dev-20060905{/}[/code]
참고로 내용형식이 php인 php 문서들은 템플릿툴 내에서는 하나의 함수로 처리됩니다. 이 때 강제로 지정되는 함수명은 hTemplateFunction_템플릿명()입니다. 위의 예에서 파일변수명이 SAMPLE이므로 이 파일변수에 해당하는 템플릿명은 변수명과 같은 SAMPLE입니다. php.ini 환경설정파일의 옵션 register_global의 값이 on으로 설정되었을 때 위 예제의 php 문서는 아래와 같이 함수명 hTemplateFunction_SAMPLE로 정의한 것과 같은 효과가 있습니다.
[code php;gutter:false]
function hTemplateFunction_SAMPLE() {
global $version;
return "템플릿버전은 $version입니다.";
}[/code]
템플릿을 디버깅하거나 에러가 발생할 때 위와 같은 hTemplateFunction_템플릿명으로 된 함수명이 나올 수 있으니 참조바랍니다.
또한 이 기능에 의하여 미리정의된 템플릿변수 {_GET.변수명}으로도 자동 처리됩니다.
'phpsource > 템플릿' 카테고리의 다른 글
{후키템플릿}8.5.전처리 명령 (0) | 2006.10.16 |
---|---|
{후키템플릿}8.4.php 명령 (0) | 2006.10.16 |
{후키템플릿}8.7.내장 필터함수 (0) | 2006.10.13 |
{후키템플릿}7.9.TR 용법 (0) | 2006.10.13 |
{후키템플릿}6.1.특수문자의 표현 (0) | 2006.10.09 |