written: Jan 28 2002
last modified: Sep 20 2006
FastTemplate을 이용하여 작성된 문서를 후키템플릿 문서로 이전하는 방법에 대하여 살펴보겠습니다. 1.1.1 버전부터는 이 기능을 지원하지 않습니다.
FastTempalte용 템플릿 파일의 호환성
FastTemplate용으로 작성된 템플릿 파일은 수정없이 후키템플릿에서 그대로 사용할 수 있습니다.
단, 이미지나 앵커 태그 등에 나타내는 URL은 템플릿 파일을 기준으로 수정하셔야 합니다. 즉, 나모 웹에디터 등에서 템플릿 파일을 보았을 때 그림 등이 정상적으로 나타나도록 URL을 수정하십시요. 만약 URL을 수정하지 않고 후키템플릿을 사용하려면 아래와 같이 객체 생성할 때 생성자의 세 번째 인수인 HTML 파서 정보 중에서 "active_url_redirection"를 false로 설정하기 바랍니다.
$tpl = new hTemplate(템플릿 파일 기본 디렉토리, 캐시 정보,
array(
'active_html_parse' => false or not,
'active_url_redirection' => false
)
);
FastTempalte 함수와의 호환성
후키템플릿는 FastTemplate에서 제공하는 함수 중에서 define, assign, get_assigned, FastPrint() 함수만을 제공합니다. 기타 함수를 사용한 FastTemplate를 이용한 문서는 아래에서 설명하는 요령에 따라 수정하면 별 문제없이 후키템플릿에서도 동작하게 됩니다.
원본을 수정하기 전에 반드시 백업받아두시기 바랍니다!!!
만약 수정 후 정상적으로 동작되지 않는다면 원본이 필요하겠지요.
제공 함수 목록
제공 함수 목록
분류 |
FastTemplate |
후키템플릿 |
기능 |
템플릿 |
define |
define |
템플릿 파일 읽기,템플릿 구조 분석 |
clear_tpl |
- |
템플릿 삭제 |
clear_define |
- |
파일핸들 삭제 |
템플릿 변수 |
assign |
assign |
템플릿 변수에 값 할당 |
parse |
assign |
get_assigned |
get_assigned |
템플릿 변수값 가져오기 |
fetch |
get_assigned |
clear |
assign |
템플릿 변수 삭제 |
clear_parse |
- |
clear_href |
assign |
clear_dynamic |
assign |
출력 |
FastPrint |
FastPrint |
템플릿 변수값 출력 |
기타 |
strict |
- |
미정의 템플릿 변수 보여주기 |
no_strict |
- |
미정의 템플릿 변수 감추기 |
define_dynamic |
- |
부모 템플릿 지정하기 |
clear_all |
- |
clear();clear_tpl(); |
FastTemplate를 이용한 PHP 소스에서 define, assign, get_assigned, FastPrint() 함수 부분은 변경없이 후키템플릿에서 동작합니다.
parse 함수
1. parse -> assign
FastTemplate에서 assign() 함수가 문자열을 다루기 위한 것이라면 parse 함수는 템플릿(또는 다이나믹 블록)을 다루기 위해 작성된 함수입니다. 후키템플릿에서는 assign() 함수를 가지고 문자열 뿐만 아니라 템플릿과 다이나믹 블록까지 처리하도록 작성되었습니다. 따라서 FastTemplate으로 작성된 문서에서 사용된 parse 함수를 assign() 함수로 함수명만 변경하면 후키템플릿에서 정상적으로 동작합니다.
예를 들어 FastTemplate를 이용하여 작성된 문서가 아래와 같다고 하면,
< >
[code php;gutter:false]
$tpl->parse('MAIN', 'main'); // 템플릿 main 처리
$tpl->parse('MAIN', array('table', 'main')); // 템플릿 table 및 main 처리
$tpl->parse('MAIN', '.row'); // 다이나믹 블록 row 처리
[/code]
이 문서를 후키템플릿에서 동작시키기 위해서는 아래와 같이 함수명 parse를 assign으로 수정합니다.
[code php;gutter:false]
$tpl->assign('MAIN', 'main'); // 템플릿 main 처리
$tpl->assign('MAIN', array('table', 'main')); // 템플릿 table 및 main 처리
$tpl->assign('row', '.row'); // 다이나믹 블록 row 처리
[/code]
버전 1.0.0부터는 append 방식을 나타내는 ".row" 대신에 아래와 같이 세 번째 인수를 true로 설정합니다.
[code php;gutter:false]
$tpl->assign('row', 'row', true); // 다이나믹 블록 row 처리
[/code]
2. 템플릿 변수명 지정
간혹 FastTemplate에서 아래와 같이 FastPrint하기 직전에 parse 함수에서 변수명을 지정하지 않는 경우도 있었을 것입니다.
[code php;gutter:false]
$tpl->parse('', 'main');
$tpl->FastPrint();
[/code]
위와 같이 하더라도 FastTemplate에서는 정상적으로 템플릿 "main"에 대한 내용을 출력하여 줍니다. 그러나 parse 함수대신에 assign() 함수를 이용하는 후키템플릿에서는 반드시 변수명을 지정하여야 합니다. 따라서 이 문서를 후키템플릿에서 동작시키기 위해서는 아래와 같이 함수명 parse를 assign으로 수정할 뿐만 아니라 변수명도 지정하여야 합니다.
[code php;gutter:false]
$tpl->assign('MAIN', 'main');
$tpl->FastPrint();
[/code]
버전 1.0.0부터는 아래와 같이 FastPrint() 메소드로 출력할 템플릿 변수를 명시적으로 지정하여 주시기 바랍니다.
[code php;gutter:false]
$tpl->assign('MAIN', 'main');
$tpl->FastPrint('MAIN');
[/code]
3. 다이나믹 블록에서의 템플릿 변수명 지정
FastTemplate에서는 다이나믹 블록을 parse 함수로 분석하여 템플릿 변수에 할당할 때 그 첫 번째 인수에 지정하는 변수명은 의미없는 값으로 어떠한 값을 지정하여도 관계없습니다.
[code php;gutter:false]
$tpl->parse('DUMMY', '.row');
[/code]
그러나 후키템플릿 버전 0.0.2부터는 첫 번째 인수를 반드시 두 번째 인수로 지정되는 블록명과 동일하게 지정하여야 합니다. 버전 1.0.0부터는 append 방식을 나타내는 ".row" 대신에 아래와 같이 세 번째 인수를 true로 설정합니다.
[code php;gutter:false]
/**
* 후키템플릿 0.0.2 버전부터는 변수명과 블록명이
* 변수명과 블록명이 동일하여야 함
*/
$tpl->assign('row', 'row', true);
[/code]
fetch 함수
FastTemplate에서의 fetch 함수는 parse 함수의 실행 결과로 얻어진 템플릿 변수값을 반환하기 위해 작성되어 있었습니다. 후키템플릿에서는 parse 함수가 별도로 존재하지 않고 assign() 함수에 흡수되었기 때문에 fetch 함수의 기능도 get_assigned() 함수에 흡수되었습니다.
따라서 FastTemplate으로 작성된 문서에서 사용된 fetch 함수를 get_assigned() 함수로 함수명만 변경하면 후키템플릿에서 정상적으로 동작합니다.
예를 들어 FastTemplate를 이용하여 작성된 문서가 아래와 같다고 하면,
[code php;gutter:false]
$tpl->parse('MAIN', array('table', 'main'));
$data = $tpl->fetch();
[/code]
이 문서를 후키템플릿에서 동작시키기 위해서는 아래와 같이 함수명 fetch를 get_assigned으로 수정합니다.
[code php;gutter:false]
$tpl->assign('MAIN', array('table', 'main'));
$data = $tpl->get_assigned();
[/code]
버전 1.0.0부터는 아래와 같이 get_assigned() 메소드로 반환받을 템플릿 변수를 명시적으로 지정하여 주시기 바랍니다.
[code php;gutter:false]
$tpl->assign('MAIN', array('table', 'main'));
$data = $tpl->get_assigned('MAIN');
[/code]
define_dynamic 함수
define_dynamic(block_name, parent_tpl_name)
이 함수는 FastTemplate에서만 필요하며 후키템플릿 문서에서는 불필요한 함수입니다. 따라서 과감히 삭제하여 주시기 바랍니다.
원래 FastTemplate에서 이 함수의 역할은 블록명과 이 블록을 포함하고 있는 템플릿과의 관계를 지정하는 것이었습니다. 후키템플릿에서는 템플릿을 읽어들인 직후 템플릿을 분석하는 과정에서 자동적으로 이 관계를 추출해 내기 때문에 define_dynamic() 함수를 통해 일부로 이 관계를 알려줄 필요가 전혀 없지요.
clear_define() 함수
clear_define([템플릿명])
FastTemplate에서 clear_define() 함수는 define() 함수에 의해 설정된 템플릿 파일과 파일핸들(템플릿명)과의 관계를 단절시키기 위해 해당 파일핸들을 삭제하기 위해 사용됩니다. 인수를 지정하지 않으면 모든 파일핸들을 삭제하지요.
후키템플릿에서는 특별한 이유가 없으면 별로 사용될 일이 없는 함수로 판단되어 이 함수를 제공하지 않습니다. 좀 더 자세한 내용은 아래 "clear_tpl 함수" 항목을 살펴보시기 바랍니다.
clear_tpl 함수
clear_tpl([템플릿명])
FastTemplate에서는 템플릿 내용을 저장하는 장소와 파일핸들(템플릿명)을 저장하는 장소가 별개로 존재하기 때문에 clear_tpl 함수와 clear_define() 함수가 나누어져 제공되고 있습니다만 후키템플릿에서는 이 장소가 동일장소로 구성되어 있기 때문에 이를 구분할 이유가 없습니다. 만약 clear_tpl() 함수가 작성된다면 clear_tpl() 함수에 의해 템플릿이 삭제될 때 파일핸들도 동시에 삭제되겠지요. 그러나 clear_define() 함수의 예와 마찬가지로 후키템플릿에서는 특별한 이유가 없으면 별로 사용될 일이 없는 함수로 판단되어 이 함수를 제공하지 않습니다.
템플릿 변수 삭제하기
clear([변수명])
clear_parse()
clear_href([변수명])
FastTemplate에서는 assign() 함수에 의해 할당되는 템플릿 변수(이하 ASSIGN 템플릿 변수)와 parse 함수에 의해 할당되는 템플릿 변수(이하 PARSE 템플릿 변수)를 서로 구별하여 관리하고 있습니다. 그러다보니 아래 표와 같이 ASSIGN 템플릿 변수를 삭제하는 함수와 PARSE 템플릿 변수를 삭제하는 함수가 별도로 제공되고 있습니다.
템플릿 변수
삭제 함수 |
기능 |
사용예 |
clear |
모든 PARSE 템플릿 변수를 삭제 |
clear() |
지정된 PARSE 템플릿 변수를 삭제 |
clear(PARSE 템플릿 변수) |
clear_parse |
모든 ASSIGN 템플릿 변수를 삭제 |
clear_parse() |
clear_href |
모든 ASSIGN 템플릿 변수를 삭제 |
clear_href() |
지정된 ASSIGN 템플릿 변수를 삭제 |
clear_href(ASSIGN 템플릿 변수) |
FastTemplate에서 보면 clear_href() 함수와 clear_parse 함수는 동일한 기능을 수행하는 함수입니다. 다른 점을 보면 clear_href() 함수에는 특정 ASSIGN 템플릿 변수를 지정하여 삭제할 수 있지만 clear_parse 함수는 항상 모든 ASSIGN 템플릿 변수를 삭제할 수 있도록 작성되어 있다는 것입니다.
후키템플릿에서는 ASSIGN 템플릿 변수와 PARSE 템플릿 변수를 구별하지 않고 동일하게 다루고 있습니다. 따라서 후키템플릿에서는 하나의 함수만으로 ASSIGN 템플릿 변수와 PARSE 템플릿 변수를 모두 다룰 수 있습니다. 이 함수가 바로 _unsetvar() 함수입니다. 그러나 이 함수도 실제로는 별 필요가 없을 것으로 생각되어 공식적으로 지원하지 않습니다. 즉 내부적으로 감추어진 메소드(private method)입니다.
따라서 clear, clear_parse, clear_href 함수가 필요하다면 hTemplate 클래스에 아래와 같이 해당 메소드를 추가하면 정상적으로 동작됩니다.
[code php;gutter:false]
/**
* clear template variables
* clears out hash created by call to assign()
*/
function clear($var_name=null) {
$this->_unsetvar($var_name);
}
function clear_parse() {
$this->_unsetvar();
}
function clear_href($var_name=null) {
$this->_unsetvar($var_name);
}
[/code]
대부분의 경우 템플릿 변수를 지워주는 clear 함수는 _unsetvar 함수를 사용하지 않더라도 assign() 함수를 이용하면 동일한 효과를 얻을 수 있습니다. 한가지 예를 들어보지요.
clear 함수는 아래와 같이 주로 블록 처리할 때 순환문의 처음이나 끝에 위치하게 될 것입니다.
[code php;gutter:false]
for ($k=9;$i<13;$k++) {
/**
* 다이나믹 블록 변수 row를 깨끗이 지워줌
*/
$tpl->clear('row');
for ($i=0;$i<3;$i++) {
$tpl->assign(
array(
'ITEM' => $item[$i],
'MONEY' => $money[$i]
)
);
/**
* 다이나믹 블록 변수 row에 값을 할당함
*/
$tpl->assign('row', '.row');
}
$tpl->assign('MONTH', $k);
$tpl->assign('month_row', '.month_row');
}
[/code]
이것을 후키템플릿에서 동작하도록 하려면 아래와 같이 clear 함수 대신에 assign() 함수를 이용할 수 있습니다. 또한 append 방식 표기방법을 수정합니다.
[code php;gutter:false]
for ($k=9;$i<13;$k++) {
/**
* 다이나믹 블록 변수 row를 깨끗이 지워줌
*/
$tpl->assign('row', '');
for ($i=0;$i<3;$i++) {
$tpl->assign(
array(
'ITEM' => $item[$i],
'MONEY' => $money[$i]
)
);
/**
* 다이나믹 블록 변수 row에 값을 할당함
*/
$tpl->assign('row', 'row', true);
}
$tpl->assign('MONTH', $k);
$tpl->assign('month_row', 'month_row', true);
}
[/code]
이와같이 assign() 함수를 이용하면 clear, clear_parse, clear_href 함수를 사용할 일이 별로 없을 것입니다.
다이나믹 블록 삭제하기
clear_dynamic(블록명)
FastTemplate에서는 parse 함수에 의해 기록된 다이나믹 블록 해석 결과를 초기화할 목적으로 이 함수가 제공되었으나, 후키템플릿에서는 데이터 구조가 완전히 달라졌으며 이에 따라 블록이 별도의 템플릿으로 기록됩니다. 따라서 clear_dynamic() 함수를 사용한다는 것은 바로 블록에 해당하는 템플릿 변수를 초기화하는 것과 같다고 볼 수 있습니다. 이러한 기능을 담당하는 함수가 바로 clear() 함수입니다.
그런데 위에서 살펴보았듯이 후키템플릿에서는 clear 함수 대신에 assign() 함수를 이용하기 때문에 clear_dynamic 함수 역시 assign() 함수를 이용하면 됩니다. 즉, 동일한 결과를 얻을 수 있는 assign(블록명, "")를 이용하시기 바랍니다.
clear_all 함수
clear_all()
clear_all 함수는 모든 템플릿 정보와 템플릿 변수를 삭제하기 위하여 clear 함수와 clear_tpl 함수를 순차적으로 실행하도록 되어 있습니다.
사실 clear 계열의 삭제함수들은 일반적으로 사용하는 경우는 거의 없기때문에 다른 삭제함수와 함께 clear_all 함수도 후키템플릿에서는 제공하지 않습니다.
FastTemplate의 도큐먼트 설명처럼 PHP 코드가 영구적인 장소에 계속 남아있는 상태에서 사용된다면 수시로 필요없는 템플릿 정보를 삭제할 필요가 있겠지만 대부분의 경우에는 PHP 코드가 일시적으로 메모리에 올라가기 때문에 그럴 경우는 거의 없을 것입니다.
혹시 인스턴스 풀링 기법 등을 이용하여 PHP 코드를 메모리에 계속 올려놓은 상태에서 사용하는 경우가 있다면 아마 clear_tpl() 함수와 clear 함수 정도는 필요할 지 모르겠으나 일단 지원하지 않도록 하겠습니다.
만약 이 함수가 꼭 필요하다면 hTemplate 클래스에 아래와 같이 clear_all 메소드를 추가하시기 바랍니다.
[code php;gutter:false]
function clear_all() {
$this->_unsetvar();
}
[/code]
strict, no_strict 함수
strict()
no_strict()
FastTemplate에서 strict, no_strict 함수는 미정의된 템플릿 변수가 있을 때 에러메시지를 발생시킬 것인지 아니면 무시하고 미정의된 템플릿 변수를 모두 null 처리할 것인지를 결정하는 함수입니다. 기본값으로는 에러메시지를 발생시키도록 되어 있습니다. no_strict 함수를 이용하면 에러메시지없이 그냥 무사통과시킬 수 있지요.
후키템플릿에서는 strict, no_strict 함수를 제공하지 않습니다. 따라서 strict, no_strict 함수는 모두 삭제하시기 바랍니다. 미정의된 템플릿 변수가 있으면 무조건 에러메시지를 보게 되거나(버전 0.0.1) 아니면 빈문자열이 할당(버전 0.0.2 이상)됩니다.
객체 생성 및 생성자
이 부분에서 클래스명을 "FastTemplate" 대신에 "hTemplate"로 변경하기만 하면 나머지는 수정하지 않더라도 후키템플릿에서 정상적으로 동작합니다. 한가지 주의할 것은 후키탬플릿은 캐시를 사용합니다. 따라서 캐시 디렉토리 기본값인 "/tmp/" 디렉토리를 생성시켜주어야 하며 이 디렉토리는 쓰기가 가능하여야 하므로 소유주 및 퍼미션을 적절히 설정하여 주시기 바랍니다.
[code php;gutter:false]
$tpl = new hTemplate('./templates');
[/code]