written: Jan 28 2002
last modified: Sep 20 2006
last modified: Sep 20 2006
define() 함수로 처리할 수 있는 템플릿 문서는 템플릿 파일이 대부분입니다. 1.2.0 버전부터는 파일이 아닌 DB 등에 저장된 템플릿을 읽어와 PHP 변수에 저장한 문자열 형식의 값으로도 처리할 수 있습니다. 이와같이 문자열 변수에 담긴 템플릿 문서를 템플릿 파일(template file)과 대비하여 템플릿 문자열(template string)이라 호칭합니다.
define(템플릿명, 템플릿 파일명, 환경설정)
define(템플릿명, 템플릿 문자열, 환경설정)
define(템플릿명, 템플릿 문자열, 환경설정)
1.0.0 버전에서 PROPOSAL(제안서)로 제안한 NO파일 용법이 바로 define() 함수에서 템플릿 문자열을 처리하는 용법을 의미합니다. 1.2.0 버전부터는 이러한 NO파일 용법을 정식으로 제공합니다.
템플릿 파일 처리하기
1개의 템플릿 파일을 지정하는 방법
define(템플릿명, 템플릿 파일명, 환경설정)
환경설정값은 1.2.0 버전부터 지원되는 기능으로 1개의 템플릿 파일을 지정할 때만 환경설정을 할 수 있습니다.
1.2.0 버전에서 지정할 수 있는 환경설정값으로는 "template_dir", "cache_type", "allow_filter"가 있습니다.
[code php;gutter:false]
$tpl->define( 'main', 'main.htm',
array(
'template_dir' => './templates',
'cache_type' => _TPL_CACHE_DYNAMIC,
'allow_filter' => 'func_a, func_b, func_c, ='
)
);
[/code]
define() 함수에 지정된 템플릿 파일 기본 디렉토리는 생성자에 지정한 디렉토리에 우선하여 처리됩니다. define() 함수에 지정된 디렉토리에 템플릿 파일이 없을 때만 생성자에 지정한 디렉토리를 사용합니다.
cache_type에서 지정할 수 있는 상수는 후키템플릿에 미리 정의되어 있으며 _TPL_CACHE_STATIC(정적캐시), _TPL_CACHE_DYNAMIC(동적캐시), _TPL_CACHE_NO(캐시하지않음)와 같이 세가지입니다. cache_type를 지정하지 않으면 정적캐시(_TPL_CACHE_STATIC)로 처리됩니다.
allow_filter은 지정된 템플릿 문서에서 허용하는 필터명령을 지정하는데 사용합니다. 위의 예에서는 "func_a", "func_b", "func_c" 및 "="(초기화명령/PHP명령)을 허용합니다.
1개 이상의 템플릿 파일을 지정하는 방법
define(
array(
템플릿명1 => 템플릿 파일명1,
템플릿명2 => 템플릿 파일명2
)
);
define() 함수는 파일로부터 템플릿 정보를 읽어들인 후 템플릿 구조 분석 및 템플릿 변수 분리 작업을 모두 수행한 후 템플릿 정보 리스트에 그 내용을 기록합니다.
[code php;gutter:false]
$tpl->define(
array(
'main' => 'main.htm',
'table' => 'dynamic.htm'
)
);
[/code]
main.htm 및 dynamic.htm은 템플릿 변수가 포함되어 있는 템플릿 파일입니다. 템플릿이 저장되어 있는 디렉토리는 객체생성할 때 생성자를 통해 지정되었음을 앞에서 설명하였습니다. 이 디렉토리는 현 웹문서가 종료될 때까지 그대로 유지됩니다. 그러나 때에 따라서는 다른 디렉토리에 있는 템플릿을 읽어올 필요도 있을 것입니다.
[code php;gutter:false]
$tpl = new hTemplate('/public/templates');
$tpl->define(
array(
'main' => 'main.htm',
'table' => './templates/dynamic.htm'
)
);
[/code]
템플릿 파일 main.htm은 /public/templates에서 찾게 되며, dynamic.htm은 ./templates/에서 찾게 됩니다.
define() 함수 사용할 때 주의할 점
버전 0.0.1에서는 assign() 함수가 나타난 이후에는 define() 함수를 사용하여서는 안됩니다. assign() 함수 이후에 define() 함수가 나타나면 이전에 assign으로 할당된 템플릿 변수가 모두 지워져 버립니다.
버전 0.0.2부터는 assign() 함수가 나타난 이후에도 define() 함수를 사용할 수 있도록 수정하였습니다. 그러나 FastPrint() 함수 이후에는 define() 함수를 사용할 수 없습니다.
버전 1.0.0부터는 FastPrint() 함수 이후에도 define() 함수를 제한없이 사용할 수 있습니다.
버전 1.2.0부터는 FastPrint() 함수가 output() 함수로 대치되었으며, 따라서 output() 함수 이후에도 define() 함수를 제한없이 사용할 수 있습니다.
템플릿 문자열 처리하기
때에 따라서는 템플릿 파일 대신에 rFastTemplate의 define_raw()와 같이 템플릿 변수가 포함된 문자열을 지정할 수 있습니다. DB 등에 저장되어 있던 템플릿 문서를 DB로부터 읽어와 define() 함수를 통해 컴파일할 수 있습니다. 1.0.0 버전에서 제안되었던 기능으로 1.2.0 버전부터 정식으로 사용할 수 있습니다.
define(템플릿명, 템플릿 문자열, 환경설정)
이와같이 템플릿 문서가 파일이 아닌 문자열에 포함되어 처리하는 기능을 NO파일(no-file) 용법이라 합니다.
후키템플릿 1.0.0~1.1.1p3 버전에서 제안되었던 NO파일 용법에 대한 문법적인 내용이 1.2.0 버전에서는 아래와 같이 대폭 변경되어 정식으로 제공됩니다. 1.2.0 버전에 포함된 NO파일 용법은 1.0.0 버전부터 1.1.1p3 버전까지 제안되었던 용법과는 상당히 다르므로 이 용법을 사용하여 홈페이지 문서를 작성하셨던 분은 주의하시기 바랍니다.
NO파일 용법에 대한 자세한 사용법은 7.8.no-file 용법을 참조바랍니다.
허용필터명령 지정하기
허용필터명령을 지정하지 않으면 모든 필터명령을 제한없이 사용할 수 있습니다. 기타 필터명령에 대한 자세한 사용법은 "8.필터처리"에 있습니다.
[code php;gutter:false]
$tpl->define('main', 'main.htm',
array(
'allow_filter' => 'func_a, func_b, func_c, ='
)
);
[/code]
자동 캐시 갱신 설정하기
템플릿 문서가 수정되었을 때 수정된 템플릿 문서에 해당하는 캐시를 자동으로 갱신해 줍니다. 1.2.0 버전부터는 후키템플릿툴 클래스 파일이 수정되면 현재 실행중이 PHP 문서에 해당하는 템플릿 문서에 해당하는 정적캐시를 자동으로 갱신해 줍니다. 만약 사용자가 작성한 임의의 php 문서를 자동 갱신 범주에 포함하고 싶다면 아래와 같이 이 문서 내에 define() 함수를 이용하여 자동으로 캐시하도록 설정할 수 있습니다.
[code php;gutter:false]
<?php
$tpl->define(__FILE__);
?>
[/code]
후키템플릿 객체를 생성한 문서 또는 define() 함수를 수행한 문서는 위와 같이 수동으로 자동 캐시 갱신을 설정하지 않더라도 해당 문서가 수정되면 캐시를 자동으로 갱신합니다.
'phpsource > 템플릿' 카테고리의 다른 글
{후키템플릿}3.5.get_assigned() (0) | 2006.09.20 |
---|---|
{후키템플릿}3.4.assign() (0) | 2006.09.20 |
{후키템플릿}3.2.객체 생성 및 소멸 (0) | 2006.09.20 |
{후키템플릿}3.1.제공 함수 목록 (0) | 2006.09.20 |
{후키템플릿}2.4.템플릿 캐시 정보 (0) | 2006.09.20 |