phpsource/템플릿2006. 9. 20. 09:38
written: Jan 28 2002
last modified: Sep 20 2006
캐시 정보
$tpl = new hTemplate(템플릿 파일 기본 디렉토리,
array(
'active_cache_handler' => false or true
or _TPL_CACHE_NO
or _TPL_CACHE_DYNAMIC
or _TPL_CACHE_STATIC,
'update' => set to true if update cache,
'id' => cache ID,
'period' => garbage collection period,
'maxlifetime' => cache valid time,
'path' => path to cache,
'mode' => cache file permission(default is 0777),
'active_cache_compress' => false or not(default is true)
)
);
후키템플릿 생성자의 두 번째 인수로 캐시 정보가 전달됩니다. 이중에서 update 및 active_cache_handler 설정은 후키템플릿에서 사용하는 설정값이며 나머지는 모두 후키캐시핸들러(클래스명 hCacheFile)에서 사용하는 설정값입니다. 후키템플릿 생성자를 실행할 때 후키캐시 클래스에 대한 객체가 생성되며 이 때 캐시 정보를을 후키캐시 클래스의 생성자에 넘겨주게 됩니다.
< 캐시 정보의 기본값 및 설정예 >
항목 용도 기본값 설정예
active_cache_handler 캐시핸들러 사용유무 true false, _TPL_CACHE_NO, _TPL_CACHE_DYNAMIC, _TPL_CACHE_STATIC
or not
update 캐시 업데이트 false false or not
id 웹페이지를 구분하기 위한 인식자 HW_CACHE_ID 임의의 문자열
period 가비지콜렉션을 수행하는 주기 259,200(3일) 초단위로 설정
maxlifetime 캐시 데이터의 유효 기간 2,592,000(30일) 초단위로 설정
path 캐시가 저장되는 디렉토리 /tmp/ 접근가능한 모든 디렉토리
mode 캐시 파일의 퍼미션 0777 0644
active_cache_compress 캐시 파일의 압축 유무 true false or not
1.2.0 버전부터 mode와 active_cache_compress 설정이 추가되었으며, active_cache_handler에 설정할 수 있는 값은 이전의 true, false 외에 상수 _TPL_CACHE_NO, _TPL_CACHE_DYNAMIC, _TPL_CACHE_STATIC가 추가되었으며 기본값이 true에서 _TPL_CACHE_STATIC으로 변경되었습니다.
캐시 정보를 지정하는 예를 들어보면 아래와 같습니다.
[code php;gutter:false] include_once('class.hTemplate.php'); $tpl = new hTemplate('./templates', array( 'id' => 'test', 'period' => 10*24*3600, // 10일 'maxlifetime' => 60*24*3600, // 60일 'path' => './hCache' ) ); [/code]
active_cache_handler
'active_cache_handler'  => false or true
or _TPL_CACHE_NO
or _TPL_CACHE_DYNAMIC
or _TPL_CACHE_STATIC,
캐시핸들러를 사용하지 않으려면 false를 설정한다. 그렇지 않으면 캐시핸들러가 기본적으로 동작합니다. 1.2.0 버전부터는 기본적으로 정적 캐시(Static Cache)로 동작합니다.
< active_cache_handler 설정값에 따른 동작 >
설정값 동작 가능 버전
true 정적 캐시 all
false 캐시 없음 all
_TPL_CACHE_NO 캐시 없음 1.2.0
_TPL_CACHE_DYNAMIC 동적 캐시 1.2.0
_TPL_CACHE_STATIC 정적 캐시 1.2.0
update
'update' => false or not(set to true if update cache)
update값이 false가 아니라면 이전에 사용하던 캐시 데이터를 말끔히 지워버리고 템플릿 파일로부터 템플릿을 다시 분석하여 변화된 템플릿 정보를 반영하여 캐시에 저장합니다. 템플릿 내용이 바뀌게 되면 이를 자동으로 감지하여 캐시 내용을 갱신하기 때문에 update 인수는 특별한 이유가 없으면 지정할 필요가 없습니다. 현재 페이지에 대한 캐시만을 강제로 갱신시킬 때 사용하시기 바랍니다.
id
'id' => cache ID
[code php;gutter:false] $tpl = new hTemplate('./templates', array( 'id' => 'abc' ) ); [/code]
후키템플릿 클래스에서 캐시를 호출할 때 위와 같이 id를 지정하였다면 후키템플릿 클래스 내부에서 후키캐시 객체를 생성할 때는 다음과 같은 방법으로 id를 재지정한 후 재지정된 id를 후키 캐시 클래스 생성자에 전달해 줍니다.
[code php;gutter:false] $id = str_replace('/', '@', substr($PHP_SELF, 1)) . "($id)"; new hCache( array( 'id' => $id ) ); [/code]
대부분의 경우에는 id를 지정할 필요가 없습니다. 클래스 내에서는 각 웹페이지를 구분하기 위하여 해당 웹페이지의 URL의 pass를 사용합니다. 예를 들어,
캐시하고자 하는 웹페이지의 URL:
http://www.phpclass.com/php/class.php

캐시클래스에 전달되는 캐시 id:
php@class.php()
후키템플릿에서는 현 문서 URL의 pass "phpclass/phpclass.php"에서 패스구분자 "/"를 "@"로 바꾼 후 후키캐시로 전달합니다. 따라서 하나의 URL로 하나의 웹페이지가 생성되는 경우에는 생성자에 id를 지정할 필요가 없습니다. 그러나 만약 하나의 URL로 여러 개의 웹페이지가 생성된다면 이를 구분할 수 있는 인식자가 추가로 필요할 것입니다. 이 역할을 하는 것이 생성자에 지정되는 id입니다. 예를 들어 id를 "1"라고 지정하게 되면 이 때 생성되는 캐시 파일명은 아래와 같을 것입니다.
캐시하고자 하는 웹페이지의 URL:
http://www.phpclass.com/php/class.php

생성자에 지정된 id값: "1"

캐시클래스에 전달되는 캐시 id:
php@class.php(1)
period
'period' => garbage collection period
[code php;gutter:false] $tpl = new hTemplate('./templates', array( 'period' => 259200 ) ); [/code]
가비지콜렉션은 서버에 많은 부담을 주는 동작 중에 하나입니다. 따라서 매번 수행하기 보다는 일정한 주기마다 정기적으로 수행하는 것이 바람직하다고 생각합니다. 이러한 이유로 후키캐시에 설정되어 있는 주기는 3일(초단위로는 259,200초)로 기본 설정되어 있습니다. 이에 따라 3일에 한번씩 가비지 콜렉션을 수행하게 됩니다. 이 주기를 더 길게하거나 짧게 하고 싶으면 period의 값을 초단위로 지정하여 주면 됩니다.
maxlifetime
'maxlifetime' => cache valid time
[code php;gutter:false] $tpl = new hTemplate('./templates', array( 'maxlifetime' => 2592000 ) ); [/code]
maxlifetime은 각 웹페이지에 대한 캐시 만료 기한을 나타내는 설정값입니다. 해당 웹페이지의 캐시 데이터를 사용한 후 maxlifetime에서 설정된 시간이 지나도록 다시 사용되지 않는다면 이 캐시 데이터는 쓰레기로 간주됩니다. 따라서 가비지콜렉션을 수행할 때 이러한 쓰레기는 모두 삭제됩니다. maxlifetime은 30일(초단위로는 2,592,000초)로 기본 설정되어 있습니다. 이 시간을 더 길게하거나 짧게 하고 싶으면 maxlifetime의 값을 초단위로 지정하여 주면 됩니다.
maxlifetime이 필요한 경우를 예를 든다면 웹페이지의 URL이 변경되었을 때 이전에 사용하던 URL에 대한 캐시 데이터는 다시 사용되지 않을 것입니다. maxlifetime은 이와같이 다시 사용되지 않는 캐시 데이터를 정리하는데 유용하게 사용될 것입니다.
path
'path' => path to cache
캐시가 저장되는 장소는 기본적으로 "/tmp/"입니다. 이 장소를 변경하고 싶을 때 path에 해당 경로를 지정해 주면 됩니다. 이 때 물론 해당 경로에 대한 퍼미션은 미리 적절히 조정해 주셔야 합니다. 리눅스에서 캐시 디렉토리에 대하여 퍼미션을 조정하려면 아래와 같이 하시기 바랍니다.
mkdir /tmp
chown nobody:nobody hCache
chmod 707 hCache
소유자가 "nobody"가 아니라면 해당되는 소유자를 지정해 주면 됩니다. 이것은 httpd.conf를 참조바랍니다.
mode
'mode' => cache file permission(default is 0777),
[code php;gutter:false] $tpl = new hTemplate('./templates', array( 'mode' => 0644 ) ); [/code]
1.2.0 버전부터는 새로운 설정값인 mode를 통해 캐시파일을 생성할 때 퍼미션 모드를 설정할 수 있도록 해줍니다. 기본값은 0777로 설정되어 있습니다.
< 캐시파일 퍼미션의 기본값 및 설정예 >
항목 용도 기본값 설정예
mode 캐시 파일의 퍼미션 0777 0644
active_cache_compress
'active_cache_compress' => false or not(default is true)
1.2.0 버전부터는 새로운 설정값인 active_cache_compress를 통해 캐시파일의 압축 유무를 설정할 수 있도록 해줍니다. 기본값은 true로 설정되어 있습니다.
gz 라이브러리 함수 gzcompress, gzuncompress를 이용하여 압축합니다. 압축에 사용하는 함수는 특별히 정해진 것은 아니고 향후 버전에서 템플릿 툴 내부에서 상황에 따라 변경될 수 있습니다.
서버가 이 함수들을 지원하지 않는다면 active_cache_compress 값을 true로 설정하더라도 압축하지 않고 저장합니다.
[code php;gutter:false] $tpl = new hTemplate('./templates', array( 'active_cache_compress' => false ) ); [/code]
< 캐시파일 압축기능의 기본값 및 설정예 >
항목 용도 기본값 설정예
active_cache_compress 캐시 파일의 압축 유무 true false or not

Posted by 방글24
phpsource/템플릿2006. 9. 20. 09:30
written: Jan 28 2002
last modified: Sep 20 2006
1.2.0 버전부터는 FastPrint() 함수 대신에 output() 함수를 이용해주세요. FastPrint() 함수는 상위호환성없이 당분간 임시로 사용될 예정입니다.
output() 함수의 사용법은 FastPrint() 함수의 사용법과 동일하며, 기존의 FastPrint() 함수에서 지정할 수 있었던 템플릿변수 외에도 HTML 스크립트 문장을 직접 지정할 수 있습니다.
또한 output() 함수에서는 FastPrint() 함수에서 디버깅할 수 있던 "템플릿 변수 정보", "템플릿 파일 정보" 외에 "캐시 관련 정보"를 볼 수 있습니다.
템플릿 변수값 출력하기
FastPrint(변수명)
이 함수는 템플릿 변수에 저장되어 있는 HTML 소스를 출력하는 기능을 담당합니다.
[code php;gutter:false] $tpl->assign('MAIN', 'main'); $tpl->FastPrint('MAIN'); [/code]
위와 같은 경우에 FastPrint() 함수는 템플릿 변수 MAIN의 값을 출력합니다.
템플릿 변수명을 지정하지 않았을 때 처리 방법
[code php;gutter:false] $tpl->assign('MAIN', 'main'); $tpl->FastPrint(); [/code]
0.0.1 버전에서의 처리방법
템플릿 변수명을 지정하지 않으면 assign(변수명,...)에 의해 마지막으로 생성된 템플릿 변수를 기본으로 사용합니다. 그러나 assign() 함수의 두 번째 인수로 템플릿 또는 블록변수(다이나믹 블록)이 아닌 순수 문자열을 지정하였을 때는 변수명을 반드시 지정하여야 합니다.
0.0.2 버전에서의 처리방법
버전 0.0.2에서는 문자열일 때도 생략할 수 있습니다.
1.0.0 버전에서의 처리방법
버전 1.0.0부터는 템플릿 변수명을 명시적으로 지정하는 것을 원칙으로 하며 지정하지 않았을 때는 향후 업그레이드 버전에서 호환성을 보장할 수 없습니다.
1.1.2 버전에서의 처리방법
버전 1.1.2부터는 템플릿 변수명을 항상 명시적으로 지정하여야 하며 지정하지 않으면 에러로 처리합니다.
FastPrint() 함수를 이용한 디버깅
아래와 같이 FastPrint() 함수의 배열인수를 통해 "-variable", "-template"를 지정하면 템플릿 변수 정보 및 템플릿 파일 정보를 알려줍니다.
[code php;gutter:false] $tpl->FastPrint( array( '-variable', '-template' ) ); [/code]
-variable
현재까지 할당되어 있는 템플릿변수에 대한 상태를 출력합니다.
-template
현재까지 템플릿파일로부터 읽고 파싱된 템플릿 정보를 출력합니다.
[code php;gutter:false] $tpl->FastPrint( array( 'MAIN', '-variable', '-template' ) ); [/code]
먼저 템플릿변수 "MAIN"를 출력합니다. 그 다음에 할당된 모든 템플릿 변수의 상태를 보여줍니다. 그 다음에 템플릿파일로부터 읽어들인 모든 템플릿 정보를 보여줍니다.
만약 디버깅 정보 전부가 아닌 일부 템플릿 변수(또는 템플릿 정보, 캐시 관련 정보)에 대하여만 보고 싶다면 아래와 같이 보고싶은 정보 항목을 명시적으로 지정하면 됩니다.
[code php;gutter:false] $tpl->FastPrint( array( 'MAIN', '-variable PAGEVIEWS HEAD_TITLE COUNTER', '-template MAIN' ) ); [/code]
이 기능에 대한 좀 더 자세한 정보는 "2.2.템플릿 변수 정보", "2.3.템플릿 구조 정보를 참조바랍니다.

Posted by 방글24
phpsource/템플릿2006. 9. 20. 09:28
written: Jan 28 2002
last modified: Sep 20 2006
템플릿 변수값 읽어오기
get_assigned(변수명)
이 함수는 해당 템플릿 변수에 지정되어 있는 변수값을 반환해 줍니다. 따라서 아래와 같은 경우를 보면 "잘되나 돌려봐야지" 라는 문자열을 반환해 주게 됩니다.
[code php;gutter:false] include_once('class.hTemplate.php'); $tpl = new hTemplate('./templates'); $tpl->define('table', 'table.htm'); $tpl->assign('BODY', '잘되나 돌려봐야지.'); $body = $tpl->get_assigned('BODY'); [/code]
FastTemplate에서는 assign() 함수에 의해 할당된 템플릿 변수와 parse 함수에 의해 할당된 템플릿 변수가 구분되어 있습니다. 그러나 후키템플릿에서는 아래 표에서 보는 바와 같이 템플릿 변수가 하나로 통일되어 있습니다.
< 템플릿 변수의 종류 및 저장 장소 >
종류 저장장소
FastTemplate 후키템플릿
assign() 함수에 의해 할당된 템플릿 변수 $PARSEVARS[변수명] 템플릿변수 리스트[변수명]
parse 함수에 의해 할당된 템플릿 변수 $변수명
< 템플릿 변수값 읽어오는 함수 >
종류 수행함수
FastTemplate 후키템플릿
assign() 함수에 의해 할당된 템플릿 변수값 읽어오기 get_assigned(변수명) get_assigned(변수명)
parse 함수에 의해 할당된 템플릿 변수값 읽어오기 fetch(변수명)
FastTemplate에서의 fetch 함수는 parse 함수의 실행 결과로 얻어진 템플릿 변수값을 반환하기 위해 작성되어 있었습니다. 후키템플릿에서는 템플릿 변수가 하나로 통일되었기 때문에 함수를 구분하여 작성할 필요가 없어졌고 따라서 템플릿 변수를 읽어오는 함수는 get_assigned() 함수로 통일되었습니다.
get_assigned() 함수를 이용하면 템플릿 변수값을 웹브라우저로 직접 출력하는 대신에 PHP 코드 내로 변수값을 넘겨 받을 수 있습니다. 그러면 넘겨 받은 값을 가지고 E-Mail로 전송하거나 파일로 저장하거나 할 수 있지요.
[code php;gutter:false] $data = $tpl->get_assigned('MAIN'); fwrite($fd, $data); // save to a file [/code]
템플릿 변수명을 지정하지 않았을 때 처리 방법
[code php;gutter:false] $tpl->assign('MAIN', array('table', 'main')); $data = $tpl->get_assigned(); [/code]
0.0.1 버전에서의 처리방법
템플릿 변수명을 지정하지 않으면 assign(변수명,...)에 의해 마지막으로 생성된 템플릿 변수를 기본으로 사용합니다. 그러나 assign() 함수의 두 번째 인수로 템플릿 또는 블록변수(다이나믹 블록)가 아닌 순수 문자열을 지정하였을 때는 변수명을 반드시 지정하여야 합니다.
0.0.2 버전에서의 처리방법
버전 0.0.2에서는 문자열일 때도 생략할 수 있습니다.
1.0.0 버전에서의 처리방법
버전 1.0.0부터는 템플릿 변수명을 명시적으로 지정하는 것을 원칙으로 하며 지정하지 않았을 때는 향후 업그레이드 버전에서 호환성을 보장할 수 없다.
1.2.0 버전에서의 처리방법
템플릿 변수명을 명시적으로 지정하여야 하며, 지정하지 않으면 정상적으로 동작하지 않습니다.
사용 예제
템플릿을 이메일로 보내기
후키템플릿은 템플릿 내용으로 HTML 문서로 제한하지 않습니다. 따라서 템플릿 분석 결과를 브라우저로 출력하는 대신 그 데이터를 변수로 되돌려 받아 이메일로 보낼 수 있습니다.
[code php;gutter:false] $data = $tpl->get_assigned(); mail('hwooky@phpclass.com', '후키템플릿', $data); [/code]
템플릿을 파일로 저장하기
템플릿 분석 결과를 아래와 같이 별도의 파일로 저장할 수 있습니다.
[code php;gutter:false] $data = $tpl->get_assigned(); if ($fp=@fopen('parsed.html', 'w')) { fwrite($fp, $data); fclose($fp); } [/code]
템플릿을 다른 템플릿 변수에 할당하기
템플릿 분석 결과를 아래와 같이 또 다른 템플릿 변수에 할당하게 되면 다음 템플릿을 분석할 때 이용할 수 있을 것입니다.
[code php;gutter:false] $data = $tpl->get_assigned(); $tpl->assign('NEXTMAIN', $data); [/code]
get_assigned()로 획득한 값을 출력할 때 주의할 점
1.2.0 버전부터 FastPrint() 함수대신에 사용되는 output() 함수에서 출력된 템플릿 스크립트가 php 에서 제공하던 출력버퍼 대신에 후키템플릿 자체 버퍼를 이용하며, 자체 버퍼에 저장된 템플릿 스크립트는 shutdown 함수가 실행될 때 브라우저로 전송됩니다. 따라서 print 또는 echo 함수를 이용하여 출력된 스크립트들은 자체 버퍼에 저장된 템플릿 스크립트보다 먼저(php5) 또는 나중(php4)에 출력됩니다.
따라서 get_assigned() 함수로 획득한 템플릿 스크립트를 순서대로 브라우저로 전송하려면 print 또는 echo 함수를 이용하면 안되며 새로 추가된 output()함수를 이용하시기 바랍니다.
[code php;gutter:false] $tpl->output($tpl->get_assigned('VARNAME')); [/code]

Posted by 방글24