phpsource/템플릿2006. 9. 20. 13:41
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]

Posted by 방글24
phpsource/템플릿2006. 9. 20. 13:05
written: Jan 28 2002
last modified: Sep 20 2006
여기서는 기존에 FastTemplate을 이용하여 작성된 문서를 거의 수정없이 사용하는 방법에 대하여 살펴보겠습니다.  1.1.1 버전부터는 이 기능을 지원하지 않습니다.
hFastTempalte 클래스
hFastTemplate 클래스는 FastTempalte로 작성된 문서를 수정없이 재사용하기 위해 작성된 것입니다. 이 클래스는 class.hFastTemplate.php 파일 내에 작성되어 있습니다.
hTemplate 클래스 대신에 hFastTemplate 클래스를 이용하면 FastTemplate 문서(php 소스 및 템플릿 파일)를 거의 수정없이 재사용할 수 있습니다.
FastTempalte용 템플릿 파일의 호환성
FastTemplate용으로 작성된 템플릿 파일은 전혀 변경없이 후키템플릿에서 그대로 사용할 수 있습니다.
FastTempalte용 php 소스의 호환성
후키템플릿 hFastTemplate 클래스의 사용방법은 FastTemplate의 사용방법과 동일합니다. 따라서 기존에 FastTemplate를 이용하여 작성된 페이지가 있다면 아래와 같이 클래스 파일명과 클래스명만 변경시켜주면 나머지 부분은 전혀 변경하지 않고도 사용할 수 있습니다.
예를 들어 FastTemplate를 이용하여 작성된 문서가 아래와 같다고 하면,
[code php;gutter:false] include_once('./class/template/class.FastTemplate.php'); $tpl = new FastTemplate('./Templates'); [/code]
이를 아래와 같이 수정합니다.
[code php;gutter:false] include_once('./class/template/class.hFastTemplate.php'); $tpl = new hFastTemplate('./Templates', array( 'update' => $update ? true : false, 'id' => $sign, 'path' => './cache' ) ); [/code]
hFastTemplate 클래스를 이용하면 URL 자동 변경기능을 수행하지 않습니다. 반면 캐시 기능은 "active_cache_handler"를 true로 지정하지 않더라도 동작하도록 되어 있습니다. 만약 캐시 기능까지 동작하기를 원치않으면 아래와 같이 "active_cache_handler"를 false로 설정하기 바랍니다.
[code php;gutter:false] $tpl = new hFastTemplate('./Templates', array( 'active_cache_handler' => false ) ); [/code]
FastTempalte 함수와의 호환성
FastTemplate에서 제공하는 함수 중에서 define, assign, get_assigned, parse, FastPrint, fetch, define_dynamic, clear_dynamic 함수만을 이용하여 작성된 소스라면 hFastTemplate 클래스를 이용하여 거의 100% 수정없이 사용할 수 있을 것입니다.
이 외의 함수로는 clear 계열의 삭제함수 밖에 없습니다만 아마 일반적으로 clear 계열의 함수를 사용하는 경우는 거의 없을 것입니다. 혹시나 해서 FastTemplate에서 제공하는 모든 삭제함수(clear_tpl, clear_all, clear, clear_parse, clear_href, clear_define)에 대하여도 가능한한 호환성을 유지되도록 작성하였습니다. 다른 함수와 달리 삭제함수는 템플릿 자료구조의 영향을 직접적으로 받기 때문에 템플릿 자료구조가 다른 FastTemplate와 호환성을 유지하기는 매우 어렵습니다. 따라서 경우에 따라서는 문제가 발생할 수 있으니 충분히 테스트해 보시기 바랍니다.
원본을 수정하기 전에 반드시 백업받아두시기 바랍니다!!! 만약 수정 후 정상적으로 동작되지 않는다면 원본이 필요하겠지요.
제공 함수 목록
<표1> 제공 함수 목록
분류 FastTemplate hFastTemplate 기능
템플릿 define define 템플릿 파일 읽기,템플릿 구조 분석
clear_tpl clear_tpl*1 템플릿 삭제
clear_define clear_define*1 파일핸들 삭제
템플릿 변수 assign assign 템플릿 변수에 값 할당
parse parse
get_assigned get_assigned 템플릿 변수값 가져오기
fetch fetch
clear clear 템플릿 변수 삭제
clear_parse clear_parse
clear_href clear_href
clear_dynamic clear_dynamic
출력 FastPrint FastPrint 템플릿 변수값 출력
기타 strict - 미정의 템플릿 변수 보여주기
no_strict - 미정의 템플릿 변수 감추기
define_dynamic define_dynamic*1 부모 템플릿 지정하기
clear_all clear_all clear();clear_tpl();
<표1>에 표기된 hFastTemplate의 멤버함수 중에서 *1 표시가 있는 함수들(clear_tpl, clear_define, define_dynamic)은 실행문장이 없는 더미 함수들입니다.
strict, no_strict 함수
strict()
no_strict()
FastTemplate에서 strict, no_strict 함수는 미정의된 템플릿 변수가 있을 때 에러메시지를 발생시킬 것인지 아니면 무시하고 미정의된 템플릿 변수를 모두 null 처리할 것인지를 결정하는 함수입니다. 기본값으로는 에러메시지를 발생시키도록 되어 있습니다. no_strict 함수를 이용하면 에러메시지없이 그냥 무사통과시킬 수 있지요.
hFastTemplate 클래스에서는 strict, no_strict 함수를 제공하지 않습니다. 따라서 strict, no_strict 함수는 모두 삭제하시기 바랍니다. 미정의된 템플릿 변수가 있으면 무조건 에러메시지를 보게 되거나(버전 0.0.1) 아니면 빈문자열이 할당(버전 0.0.2 이상)됩니다.

Posted by 방글24
phpsource/템플릿2006. 9. 20. 12:56
written: Jan 28 2002
last modified: Sep 20 2006
템플릿을 이용하여 웹페이지를 작성하는 과정을 살펴보겠습니다.
수행 동작 3단계
하나의 템플릿을 가지고 HTML로 변화시키는 과정은 보통 3단계를 거치게 됩니다. 이러한 과정을 모든 템플릿에 대하여 순차적으로 또는 병행하여 수행하므로써 하나의 완성된 페이지가 작성되는 것입니다.
  1. 템플릿 문서 등록하기 : define()
  2. 템플릿 변수 할당하기 : assign()
  3. 템플릿 변수 출력하기 : output()
FastTemplate에서는 assign 단계가 assign과 parse로 나누어 설명됩니다. 그러나 후키템플릿에서는 parse 단계에 있던 대부분의 기능이 define 단계에 흡수되었으며 나머지 부분 즉 템플릿 내에 있는 변수에 값을 할당하는 것은 assign 개념과 같은 개념으로 보기 때문에 이 기능 또한 assign 단계에 흡수되었습니다.
output() 함수는 1.2.0 버전부터 지원되는 함수로 이전 버전의 FastPrint() 함수의 모든 기능을 포함하고 있습니다.
< 수행 동작 3단계 >
템플릿 문서 등록하기
define(템플릿명, 템플릿파일명)
이 부분은 함수 내부 동작에 있어서 FastTemplate와 후키템플릿 사이에 가장 큰 차이를 보이는 부분입니다. FastTemplate에서는 단지 템플릿명을 파일명으로 맵핑하는 것으로 define() 함수의 동작이 종료됩니다. 그러나 후키템플릿에서는 맵핑뿐만 아니라 파일로부터 템플릿 정보를 읽어들인 후 템플릿 구조 분석 및 템플릿 변수 분리 작업을 모두 수행하게 됩니다.
예를 들어 템플릿 정보가 저장된 파일이 "calendar.htm"이고 이를 메모리상에 올렸을 때의 템플릿을 "cal"이라는 이름으로 읽어들이고자 한다면 아래와 같이 코딩합니다.
[code php;gutter:false] $tpl->define('cal', 'calendar.htm'); [/code]
버전 1.0.0부터 제안된 no-file용법을 이용하면 템플릿 파일 대신에 템플릿 변수가 포함된 HTML 소스가 저장된 문자열을 직접 지정할 수 있습니다.
템플릿 변수 할당하기
assign(템플릿변수명, 템플릿명)
assign(템플릿변수명, 블록명)
assign(템플릿변수명, 문자열)
템플릿 변수에 그 값을 할당하는 단계로서, 두 번째 인수로 지정되는 것이 무엇이냐에 따라 변수값 처리방법이 달라지게 됩니다.
변수값으로 지정될 수 있는 것은 3가지로 문자열, 템플릿명, 블록명이 올 수 있습니다.
문자열을 할당할 때
문자열을 지정할 때는 그 문자열 값이 그대로 변수값으로 할당됩니다. 이 문자열은 템플릿 변수가 포함되지 않은 HTML스크립트를 포함한 일반 문자열이어야 합니다.
assign(템플릿변수명, 문자열)
만약 템플릿 변수가 포함된 문자열을 처리해야 한다면, assign()이 아니라 define() 메소드를 이용하여 해당 문자열을 먼저 템플릿으로 등록하여야 합니다. 이 용법에 대하여는 "define()" 메뉴의 "no-file 용법" 항목을 참조 바랍니다.
템플릿명을 지정할 때
템플릿명을 지정하게 되면 해당 템플릿을 가져와서 그 내부에 포함되어 있는 변수를 모두 처리한 후 그 결과값을 첫 번째 인수로 지정된 템플릿 변수명에 할당합니다.
assign(템플릿변수명, 템플릿명)
블록명을 지정할 때
블록명을 지정하게 되면 해당 블록 내용을 가져와서 그 내부에 포함되어 있는 변수를 모두 처리한 후 그 결과값을 지정된 블록명에 해당하는 변수에 할당합니다.
각 블록에는 지정된 템플릿 변수가 미리 정의되어 있으며 이 변수명은 블록명과 동일합니다. 버전 0.0.1에서는 블록명을 지정할 때는 assign() 함수에 지정된 첫 번째 인수 템플릿 변수명은 사용되지 않는 무의미한 인수로 어떤 변수명을 지정하더라도 상관없으며 그냥 무시해버립니다.
assign(템플릿변수명, 블록명)
버전 0.0.2부터는 아래와 같이 템플릿 변수명을 반드시 블록명과 동일하게 지정하여야 에러메시지를 보지 않게 될 것입니다.
assign(블록명, 블록명)
버전 1.2.0부터는 템플릿 변수명을 블록명과 동일하게 지정하지 않아도 에러메시지를 발생시키지는 않습니다. 두번째 인자로 지정한 해당 블록의 처리 결과를 첫번째 인자로 지정한 변수에 저장합니다. 따라서 첫번째 인자와 두번째 인자로 지정된 이름이 다르게 되면 템플릿 문서 내의 해당 블록 위치에는 아무런 값도 나타나지 않을 것입니다.
앞장에서 살펴본 2001년 12월 달력을 예로 든다면 아래와 같이 템플릿 변수 "YEAR"과 "MONTH"에 해당값을 할당할 수 있을 것입니다.
[code php;gutter:false] $tpl->define('cal', 'calendar.htm'); $tpl->assign( array( 'YEAR' => '2001', 'MONTH' => '12', 'MAIN' => 'cal' ) ); [/code]
< >
템플릿 변수 출력하기
output(템플릿변수명)
assign() 함수를 통해 할당된 템플릿 변수값을 output() 함수를 통해 웹브라우저로 출력합니다. 1.2.0 이전 버전에서는 output() 함수 대신에 FastPrint() 함수를 이용하여야 합니다.
[code php;gutter:false] $tpl->output('MAIN'); [/code]

Posted by 방글24