phpsource/템플릿2006. 9. 20. 21:46
written: Jan 28 2002
last modified: Sep 20 2006
4가지 자료구조
후키템플릿에서 사용하는 템플릿에 관련된 자료구조는 4가지 형태입니다.
  1. 템플릿 문서(파일 또는 NO파일)
  2. 템플릿 구조
  3. 템플릿 변수
  4. HTML 문서
< 자료구조 >
< 템플릿 관련 자료구조 >
자료 구조 저장 위치
템플릿 문서 파일은 서버 디스크, NO파일은 php 문서에서 문자열로 지정
템플릿 구조 서버 메모리
템플릿 변수 서버 메모리
HTML 문서 서버 메모리, 인터넷망, 웹브라우저
템플릿 문서(template document)
템플릿 문서는 일반적인 HTML 문서와 동일합니다. 차이점은 그 안에 템플릿 변수가 들어있다는 것뿐입니다. 템플릿 문서는 대부분 파일 형태로 제공됩니다. 이러한 템플릿 파일은 나모 웹에디터 또는 드림위버와 같은 HTML 제작툴을 이용하면 멋진 문서를 아주 쉽고도 빠르게 작성할 수 있습니다.
1.0.0 버전부터는 템플릿이 파일이 아니라 DB 등에 저장되어 문자열 형태로 제공될 수 있으며 이러한 템플릿 형식을 NO파일이라 합니다.
템플릿 구조(template structure)
define() 함수를 이용하여 템플릿 문서를 메모리상에 올려놓을 수 있습니다. 템플릿 문서 구조와는 자료 구조 형태가 다소 다릅니다. 템플릿 문서에는 HMTL과 템플릿 변수가 뒤썩여있지만 메모리에 올려진 템플릿 구조를 보면 HTML 문서와 템플릿 변수가 질서정연하게 분류되어 저장되어 있습니다. 아울러 파일에 관한 정보(파일명, 파일이 최종 수정된 시간, 내포된 블록에 대한 정보 등)가 잘 정돈되어 있습니다.
< 템플릿 구조의 구성 >
< 템플릿 저장 장소 >
구분 FastTemplate 후키템플릿
사용 함수 define(
 array(
   "템플릿명"=>"템플릿 파일명"
 )
)
parse("템플릿 변수명", "템플릿명")
define("템플릿명", "템플릿파일명")

또는

define("템플릿명", "템플릿문자열")
템플릿 저장위치 parse 함수 실행시 $this->템플릿명에 템플릿 파일로 부터 읽어들인 템플릿이 저장됨. $this->템플릿 구조[템플릿명]에 템플릿 문서로부터 읽어들인 템플릿을 컴파일하여 템플릿환경, HTML문서와 템플릿변수가 분리되어 저장됨.
후키템플릿에서 사용하는 템플릿 구조의 자료구조는 잘 정리되어 있습니다. 템플릿 구조의 자료구조를 살펴보기 위해 아래와 같은 템플릿 예를 들어보겠습니다. define() 함수에 의해 구조분석이 끝나게 되면 생성된 객체의 템플릿 구조에는 아래와 같이 템플릿 내용이 저장됩니다. 아래 내용은 print_r() 함수로 표시한 예입니다.
 Array
(
[table] => Array
(
[body_contents] => Array
(
[0] => HTML 문자
[1] => 템플릿 변수명
[2] => HTML 문자
.
.
.
)

[tpl_info] => Array
(
[type] => FILE
[filename] => table.htm
[filemtime] => 1011593178
[parent] =>
[child] => Array
(
[0] => row_block
)
)
)

[row_block] => Array
(
[body_contents] => Array
(
[0] => HTML 문자
[1] => 템플릿 변수명
[2] => HTML 문자
.
.
.
)

[tpl_info] => Array
(
[type] => BLOCK
[parent] => table
[child] => Array
(
)
)
)

[*var_in_tpl] => Array
(
[row_block] =>
)
)
각 템플릿에 대한 일반적인 정보
위 자료구조의 내용을 개략적으로 살펴보면 "table", "row_block"은 템플릿명을 가리킨다. 이중에 "table"은 템플릿 파일인 table.htm로 부터 읽어들인 데이터를 분석한 템플릿 정보를 저장하였음을 나타내고 있고, "row_block"은 table.htm 내에 존재하는 블록변수(다이나믹블록)에 대한 템플릿 정보를 저장하고 있음을 나타내고 있습니다. 이러한 템플릿 환경에 대한 일반적인 정보는 "tpl_info"에 기록되어 있습니다. 블록변수(다이나믹블록)로부터 추출된 템플릿의 이름은 블록명과 동일합니다.
FastTemplate와는 다르게 후키템플릿에서는 블록변수(다이나믹블록)가 별도의 템플릿으로 기록되어 있습니다. 이것은 마치 FastTemplate에서 블록을 별도의 파일로 처리했을 때에 볼 수 있는 현상입니다. 결국 후키템플릿에서는 HTML 블록이 별도의 파일로 처리되나 아니면 블록변수(다이나믹블록)로 처리되나 템플릿 구조에 기록되는 결과는 거의 같습니다.
차이점이 있다면 템플릿을 별도의 파일로 구성하면 템플릿명을 임의로 지정할 수 있으나 블록변수(다이나믹블록)로 구성하면 템플릿명을 지정할 수 없으며 블록명이 곧 템플릿명이 된다는 것입니다.
후키템플릿에서는 define_dynamic 함수가 필요없다고 하였는데 그것은 템플릿 구조의 자료구조에서 보듯이 각 템플릿의 [템플릿명][tpl_info][child]를 보면 알 수 있기 때문입니다. 해당 템플릿에 포함된 블록이 이곳에 모두 기록되지요. 단, 모든 하위 블록이 모두 기록되는 것은 아니고 바로 밑에 있는 하위 블록만 기록됩니다.
각 템플릿은 양방향의 linked-list 자료구조로 설계되어 있기 때문에 만약 템플릿(또는 블록)에 포함된(중첩된) 하위 블록의 리스트를 알고 싶으면 템플릿 구조에서 [템플릿명(또는 블록명)][tpl_info][child]을 보면 그 하위 블록의 리스트를 연속적으로 얻을 수 있습니다.
각 템플릿 내용 분석
이제는 템플릿의 내용이 어떻게 기록되어 있는지 살펴보겠습니다. 템플릿 구조의 자료구조에서 각 템플릿에는 일반적인 정보를 나타내는 "tpl_info" 외에 템플릿의 실제 내용이 저장되는 "body_contents"가 있습니다. "body_contents"에는 바로 템플릿 내용을 템플릿 변수와 순수 HTML 소스로 분리하여 저장하는 곳입니다. 이를 원래 템플릿 내용으로 복원하려면 아래와 같이 하면 됩니다.
원래 템플릿 내용 =
body_contents[0] + {body_contents[1]} +
body_contents[2] + {body_contents[3]} +
body_contents[4] + {body_contents[5]} +
....... + ....... +
body_contents[마지막 첨자]
각 템플릿에 존재하는 템플릿 변수
마지막으로 설명 안된 부분이 "*var_in_tpl"입니다. 이것은 define() 함수를 실행하는 중에 발생한, 즉 템플릿 구조분석을 하는 중에 발생한 템플릿 변수를 기록하는 곳으로 각 템플릿 파일에 선언된 템플릿 변수와 블록변수(다이나믹블록)명에 해당하는 템플릿변수가 이곳에 기록됩니다.
템플릿 table에 포함된 블록변수(다이나믹블록)에 해당하는 템플릿 변수 {row_block}의 초기값(null로 지정되어 있음)을 지정하는 곳이 바로 "*var_in_tpl"입니다. 여기에 기록된 템플릿 변수값들은 임시로 기록되어 있는 값이며 define() 함수가 종료될 때 "*var_in_tpl"의 내용이 템플릿 변수 영역에 일괄 할당됩니다.
템플릿 변수(template variable)
assign() 함수에 의해 각 템플릿 변수에 대한 변수값이 지정됩니다. 변수값으로는 문자열을 직접 할당할 수도 있고, 템플릿(또는 블록)의 내용을 할당할 수도 있습니다. 템플릿(또는 블록)의 내용을 할당할 때는 할당하기 전에 템플릿 내에 있는 또 다른 변수부터 미리 지정된 값으로 대치하게 됩니다.
결국 템플릿 변수에 할당된 값에는 또 다른 변수가 포함될 수 없습니다. 템플릿 변수에 있는 값들은 output() 함수에 의해 바로 브라우저로 전송할 수 있는 상태로 존재하고 있습니다.
[code php;gutter:false] $tpl->define('cal', 'calendar.htm'); $tpl->assign( array( 'YEAR' => '2001', 'MONTH' => '12' ) ); $tpl->assign('MAIN', 'cal'); [/code]
예를 들어 템플릿 파일 "calendar.htm"에 "{YEAR}년 {MONTH}월"라는 내용이 들어있을 때, 위와 같이 PHP 코드를 수행한다면 템플릿 변수에는 아래와 같이 총 3개의 변수값이 존재합니다.
템플릿 변수["YEAR"] = "2001"
템플릿 변수["MONTH"] = "12"
템플릿 변수["MAIN"] = "2001년 12월"
구분 FastTemplate 후키템플릿
사용 함수 assign("템플릿 변수명1", "문자열") parse("템플릿 변수명2", "템플릿명") assign("템플릿 변수명1", "문자열") assign("템플릿 변수명2", "템플릿명")
템플릿 저장위치 $this->PARSEVARS[템플릿 변수명]에 assign() 함수로 지정된 문자열과 parse 함수에 의해 템플릿을 해석한 결과값이 저장됨. parse 함수를 수행하게 되면 동시에 $this->템플릿 변수명에도 템플릿을 해석한 결과값이 저장됨 $this->템플릿 변수[템플릿 변수명1]에는 assign() 함수로 지정된 문자열이 저장되며 $this->템플릿 변수[템플릿 변수명2]에는 템플릿의 내용(템플릿 내의 또 다른 변수가 처리된 후)이 저장됨
HTML 문서(페이지 문서)
템플릿 변수에는 항상 순수 HTML 코드만 들어 있으며 여기에는 어떠한 템플릿 변수도 포함되어 있지 않습니다. output 함수(1.2.0 이전 버전에서는 FastPrint() 함수)에 의해 웹브라우저로 보내지게 되는 템플릿 변수 내용이 바로 웹페이지를 구성하는 HTML 문서가 됩니다.
템플릿명 및 변수명을 정할 때 규칙
FastTemplate에서의 규칙
FastTemplate에서는 파싱결과를 템플릿 변수명을 기반으로 하는 단순변수 형태의 멤버변수에 직접 기록합니다. 또한 템플릿 파일로 부터 읽어들이는 템플릿도 템플릿명을 기반으로 하는 단순변수 형태의 멤버변수에 직접 기록합니다. 이러한 이유로 해서 클래스 내부에서 정의하여 사용되고 있는 멤버변수와 충돌이 일어날 가능성이 있지요.
FastTemplate에서 클래스 내부에서 정의하여 사용하고 있는 멤버변수로는 $FILELIST, $DYNAMIC, $PARSEVARS, $LOADED, $HANDLE, $ROOT, $WIN32, $ERROR, $LAST, $STRICT 등이 있습니다. 이와 같이 내부에서 정의하여 사용하고 있는 멤버변수와 동일하게 템플릿명 또는 템플릿 변수명으로 사용한다면 충돌이 일어나 프로그램이 정상적으로 동작하지 않게 될 것입니다.
템플릿명과 템플릿 변수명를 기반으로 단순변수 형태의 멤버변수를 정의하여 사용하기 때문에 템플릿명과 템플릿 변수명은 반드시 일반 PHP 변수명을 정할 때 지켜야 할 규칙을 따라야 합니다. 즉, 영문자, 숫자 및 밑줄 만을 이용하여야 별 문제가 생기지 않을 것입니다.
후키템플릿에서의 규칙
후키템플릿에서는 템플릿 또는 템플릿 변수를 별도의 멤버로 구분하여 저장하도록 되어 있습니다.
사용 함수 저장 위치
define("템플릿명", "템플릿 파일명") $this->템플릿 구조[템플릿명]에 템플릿 파일로 부터 읽어들인 템플릿이 저장됨
assign("변수명", "문자열") $this->템플릿 변수[변수명]에 "문자열"이 저장됨
assign("변수명", "템플릿명") $this->템플릿 변수[변수명]에 템플릿 내에 있는 또 다른 변수가 모두 처리된 후 그 결과값이 저장됨
위와 같이 후키템플릿에서는 템플릿명과 템플릿 변수명을 서로 다른 배열 변수(템플릿 구조 및 템플릿 변수)에 배열 첨자를 기반으로 기록하기 때문에 충돌가능성을 원천적으로 방지하고 있습니다. 따라서 템플릿명 또는 템플릿 변수명을 지을 때 알파벳, 숫자, 밑줄만으로 구성되어져 있다면 어떤 이름을 사용하더라도 상관없습니다. 사실 FastTemplate와는 다르게 템플릿명과 템플릿 변수명이 배열 첨자로 사용되기 때문에 #, (, ), ? 등과 같은 특수문자를 이름으로 사용할 수도 있겠으나 향후 상위 버전과의 호환성을 염두에 둔다는 의미에서 이를 지원하지 않겠습니다.
따라서 후키템플릿에서는 일반적인 언어에서와 같이 변수명을 영문자, 숫자, 밑줄 및 하이픈으로 제한하며 첫문자는 반드시 영문자이어야 합니다. 영문자는 대소문자를 구별합니다. 이러한 규칙을 지킨다면 어떠한 이름을 사용하여도 관계없습니다. 단 한가지 예외사항으로 "GLOBALS"를 변수명으로 사용하지 말기 바랍니다. 이것조차 지원하려고 하였으나 PHP 전역변수 처리와 관련하여 충돌되는 부분이 있어 어쩔 수 없이 예외로 처리하게 되었습니다.
그리고 클래스 내부에서 이미 "*var_in_tpl"를 템플릿 구조의 배열 첨자로 사용하고 있습니다. 이러한 특수문자들은 향후에도 클래스 내부에서 어떠한 형태로든지 사용될 수 있으므로 템플릿명과 템플릿 변수명을 정할 때는 이러한 특수문자들을 사용하지 말기 바랍니다.
템플릿 변수명을 정할 때 또 하나 주의할 것이 있습니다. 템플릿 내에 블록이 존재하는 경우 이 블록의 이름(블록명)은 클래스 내부에서 임의대로 템플릿명과 템플릿 변수명으로도 사용되므로 블록명에 해당하는 템플릿명과 템플릿 변수명은 사용하지 말기 바랍니다.

Posted by 방글24
phpsource/템플릿2006. 9. 20. 21:38
written: Jan 28 2002
last modified: Sep 20 2006
템플릿 사용으로 인한 수행속도 저하
HTML 문서 내에 직접 PHP 코드를 삽입하는 방식과 비교하면 템플릿을 이용할 때의 속도가 느려지게 될 것입니다. 아무래도 템플릿을 분석하는 등의 일을 하는데 시간이 걸리겠지요. 이 때의 시간이란 물론 서버상에서 템플릿을 처리하는 시간이 될 것입니다.
그러나 이러한 서버상에서의 처리 시간이 그대로 인터넷 사용자가 느끼는 체감속도와는 상당히 다릅니다. 인터넷에서 문서를 요구(request)받았을 때부터 사용자에게 응답(response)될 때까지 웹문서 데이터가 이동하는 시간을 분석해 보면 서버에서 데이터가 처리되는 시간은 데이터가 인터넷망에 머무는 시간에 비해 수천분의일 정도 밖에 안될 것입니다. 따라서 서버상에서의 처리속도가 수십배 정도 느려졌다고 해도 인터넷 사용 체감속도가 느려졌다고 느끼는 분은 별로 없을 것입니다. 오히려 다른 요소들에 의해 체감속도가 들숙날숙할테니까요.
처리속도 향상을 위한 방안
그렇다고 서버 수행 속도가 마냥 느려서야 곤란하겠지요. 한 두사람 접속한다면 모르지만 수백명, 수천명이 동시에 접속한다면 서버의 수행속도는 매우 중요한 문제가 될 것입니다.
이러한 이유로 여러분도 템플릿툴 사용을 꺼리고 계시겠지요. 그러나 "구더기 무서워 장 못 담그겠습니까?" 일단 장은 담고 봐야죠(장을 담가야만 하는 이유는 앞장 "템플릿 사용에 따른 이점"을 참조바람). 그리고 나서 구더기(수행속도 저하)가 생기지 않도록 조치를 취해야 겠지요.
이러한 방안으로 템플릿툴에 캐시 개념을 도입하게 됩니다. 템플릿 파일이 변경되었을 때만 캐시 데이터를 업데이트 시켜주게 되면 다음부터는 템플릿 파일을 분석하는 일 없이 캐시된 문서를 바로 웹브라우저에 보여줄 수가 있기 때문에 PHP 코드 삽입 방식과 거의 속도 차이를 느낄 수 없을 것입니다. 대부분의 공개된 자료에서는 최종 웹페이지 문서를 캐시에 저장하는 방식을 사용합니다. 그러나 후키템플릿에서는 define() 함수에 의해 처리된 결과로 얻어진 템플릿 정보를 캐싱하는 방식을 지원합니다. 이 방식의 장점은 템플릿 파일 내용이 변경될 때마다 캐시데이터를 자동적으로 업데이트할 수 있다는 것입니다.
캐시 적용 클래스
FastTemplate의 경우 이러한 캐시 개념을 도입한 CachedFastTemplate가 공개되어 있습니다. 궁금하신 분은 www.codelib.co.kr에 가서 검색해 보세요.
후키템플릿는 템플릿 자료구조가 변경되어 CachedFastTemplate을 이용할 수 없습니다. 따라서 후키템플릿에서 캐시를 이용할 수 있도록 후키템플릿와는 별도로 캐시핸들러 클래스(후키캐시핸들러)를 제공합니다.
< 캐시 적용 >
템플릿을 캐시하기 위해 사용되는 후키캐시핸들러는 후키템플릿과는 독립적으로 작성되어 있으며 기본적으로 파일시스템을 이용하지만 데이터베이스와 같은 캐시 저장 매체로 쉽게 변경 및 확장할 수 있습니다. 후키캐시핸들러에 대한 자세한 내용은 메뉴 "캐시핸들러"를 참조바랍니다.
후키 템플릿의 동작
캐시에 저장된 템플릿 정보를 이용하여 HTML 문서를 생성할 때는 템플릿문서를 읽고 컴파일하는 과정을 생략합니다.
< 캐시를 이용할 때의 동작순서 >
캐시 핸들러의 동작
캐시템플릿에서는 아래 그림과 같이 생성자 내에서 open, gc, destroy, read 핸들러가 동작되며, 강제로 update 할 때는 destroy 핸들러가 동작되고 그렇지 않으면 read 핸들러가 동작됩니다.
< 캐시 핸들러 동작 순서 >
write, close 핸들러의 동작
0.0.4 이전 버전에서는 FastPrint() 함수가 처음 실행될 때 write, close 핸들러가 동작됩니다.
1.0.0 버전부터는 register_shutdown_function()로 지정된 콜백함수 내에서 캐시됩니다. zend engine 2.0이 탑재된 PHP 5.0.0 dev 이상 버전에서는 콜백함수 대신에 소멸자를 이용합니다.
1.2.0 버전부터는 PHP4&5 모두 register_shutdown_function()로 지정된 콜백함수 내에서 캐시됩니다.
정적 캐시(Static Cache) 및 동적 캐시(Dynamic Cache)
1.2.0 이전 버전에서는 하나의 홈페이지 문서에 하나의 캐시만 존재하도록 작성되어 있습니다. 즉 하나의 홈페이지 문서를 생성하는데 여러 개의 템플릿 파일이 이용되더라도 하나의 캐시로 통합됩니다. 하나의 문서에 하나의 캐시를 생성하는 것이 관리상 편리할 수도 있겠으나 때에 따라서는 템플릿 파일별로 캐시가 작성되는 것도 유용할 것입니다.
이를 위하여 1.2.0 버전에서는 특정 홈페이지 문서에 고정적으로 따라다니는 정적 캐시(Static Cache)와 홈페이지 문서와 관계없이 템플릿 파일별로 작성되어 홈페이지 문서에서 필요에 따라 동적으로 불러들일 수 있도록 작성된 동적 캐시(Dynamic Cache)로 구분되어 동작합니다.
define() 함수의 세번째 인자인 배열의 첨자 'cache_type'을 지정하지 않거나 상수 _TPL_CACHE_STATIC를 지정하면 정적 캐시(Static Cache)로 저장되며, 상수 _TPL_CACHE_DYNAMIC를 지정하면 동적 캐시(Dynamic Cache)로 저장됩니다.
캐시디렉토리에 저장된 캐시파일명을 보면 이전 버전에서는 아래와 같았습니다.
blog@index.php(site_index).hcache.php
웹루트에서 시작되는 파일명 'blog/index.php'에서 '/' 를 '@'로 치환한 후 '(캐시id).hcache.php'를 붙인 형태입니다. 1.2.0 버전에서는 아래와 같이 캐시파일명 형식이 변경되었습니다.
sn@site_index@blog@index.php.hcache.php
첫번째 문자 's'는 정적캐시(Static Cache)를 의미하며, 정적캐시가 아니고 동적캐시(Dynamic Cache)의 경우에는 첫번째 문자가 'd'로 기록됩니다.
[1.2.0] 두번째 문자 'n'은 active_html_compress가 false인 경우, 즉 캐시에 저장된 HTML 문서가 압축하지 않은 경우(no compress)를 의미하며, 만약 캐시에 저장된 HTML 문서가 압축된 상태, 즉 active_html_compress가 true라면 압축(compress)를 의미하는 'c' 문자가 기록될 것입니다.
[1.3.0] 캐시에 저장된 문서를 압축하느냐 하지않느냐를 결정하는 인자는 active_html_compress이 아니라 active_cache_compress입니다. 따라서 active_cache_compress가 false이면 두번째 문자가 'n'이 되고, true면 'c'가 되도록 수정합니다.
'site_index'은 캐시id를 의미하고, blog@index.php는 파일명 'blog/index.php'을 의미하고 'hcache.php'는 후키캐시 클래스에서 사용하는 첨자입니다.

Posted by 방글24
phpsource/템플릿2006. 9. 20. 17:59
written: Jan 28 2002
last modified: Sep 20 2006
1.2.0 버전 설치방법
압축파일 구성
공개된 후키템플릿의 압축파일은 아래와 같이 구성되어 있습니다.
+- test.php (게시판 목록보기 예제)
|
+- class -+- cache - class.hCacheFile.php
| |
| +- class - class.hClassMember.php
| |
| +- structure - class.hStack.php
| |
| +- globals - class.hGlobals.php
| |
| +- patterns - class.hSingleton.php
| |
| +- HTML -+- class.hHtmlParser.php
| | +- class.hHtmlUrlParser.php
| | +- class.hHtmlClassify.php
| |
| +- template -+- class.hTemplate.php
| + class.hTemplateStructure.php
| + class.hTemplateFile.php
| + class.hTemplateAssign.php
| + class.hTemplateCompile.php
| + class.hTemplateDebug.php
| + class.hTemplateCache.php (1.2.0에서 추가)
| + class.hTemplateFunction.php (1.2.0에서 추가)
| + class.hTemplateFilter.php (1.2.0에서 추가)
|
+- func -+- func.version_compare.php (1.2.0에서 삭제)
|
+- hCache --- templates (템플릿 캐시 파일 기록 장소)
|
+- templates -+- listform.htm (템플릿 파일)
|
+- images (이미지 파일들)
func.version_compare.php 파일
이 파일은 버전 비교 루틴에 문제가 있어 1.1.0 버전에 추가된 파일입니다.
[code php;gutter:false] if ('4.3.0' <= PHP_VERSION) {...} [/code]
위와 같은 단순문자열 비교로는 정확한 버전을 비교할 수가 없어 아래와 같이 version_compare() 함수를 이용하여 버전 비교 루틴을 수정하였습니다.
[code php;gutter:false] if (version_compare('4.3.0', PHP_VERSION, '<=')) {...} [/code]
그런데 version_compare() 함수가 PHP 4.1.0 버전부터 제공되는 것이라 그 이하 버전에서는 사용할 수 없습니다. 이 문제로 PHP 4.1.0 이전 버전에서도 version_compare() 함수를 사용할 수 있도록 func.version_compare.php 파일에 version_compare() 함수를 정의해 놓았습니다.
PHP 4.1.0 이전 버전에서 후키템플릿을 사용하게 되면 version_compare() 함수가 정의되어 있지 않다는 에러메시지를 보게 될 것입니다. 이러한 경우에는 후키템플릿 파일을 인클루드 하기 전에 아래와 같이 func.version_compare.php 파일을 인클루드하시기 바랍니다.
[code php;gutter:false] include_once("해당디렉토리/func/func.version_compare.php"); include_once("해당디렉토리/class/template/class.hTemplate.php"); $tpl = new hTemplate(...); [/code]
후키템플릿 1.2.0 버전에서는 PHP 4.1.0 이후 버전에서만 동작하므로 func.version_compare.php 파일이 필요없습니다.
캐시 저장 디렉토리 설정
이 구성을 그대로 유지하여 서버에 업로드 하게되면 첨부된 예제 파일 test.php를 전혀 수정없이 실행할 수 있습니다. 단 캐시 저장 디렉토리(하위 디렉토리 포함)는 읽기/쓰기를 할 수 있어야 하기 때문에 퍼미션을 아래와 같이 설정하여 주시기 바랍니다.
리눅스라면
chmod a+rwx 캐시 저장 디렉토리
처럼 하시면 되고 윈도우라면 디렉토리 속성이 읽기전용이 되지 않도록만 설정하면 됩니다.
각 디렉토리 위치를 변경하려면
클래스 파일을 다른 곳으로 옮기고 싶을 때
만약 클래스 파일을 다른 곳으로 옮기고 싶다면 class 디렉토리 및 그 하부 디렉토리의 내용을 통째로 원하는 곳으로 옮긴 후 test.php 예제 소스에 있는 include_once 부분만 아래와 같이 수정하면 되며 후키 템플릿에 포함된 클래스의 내용은 전혀 수정할 필요가 없습니다.
[code php;gutter:false] /** * hwooky Template */ include_once("옮겨진 새로운 디렉토리/class.hTemplate.php"); [/code]
캐시 저장 디렉토리를 다른 곳으로 옮기고 싶을 때
만약 캐시 저장 디렉토리를 다른 곳으로 옮기고 싶다면 test.php 예제 소스에 있는 후키템플릿 객체 생성 부분을 아래와 같이 수정하세요.
[code php;gutter:false] $tpl = new hTemplate("템플릿 파일 저장 디렉토리", array( "update" => isset($_GET["update"]) ? true : false, "id" => "listform", "path" => "새로운 캐시 저장 디렉토리" ) ); [/code]
수정하신 후 옮겨진 캐시 저장 디렉토리의 퍼미션을 다시 설정해야 하는 것 잊지마시기 바랍니다.
템플릿 파일이 위치한 디렉토리를 다른 곳으로 옮기고 싶을 때
만약 템플릿 파일이 위치한 디렉토리를 옮기고 싶다면 test.php 예제 소스에 있는 후키템플릿 객체 생성 부분을 아래와 같이 수정하세요.
[code php;gutter:false] $tpl = &new hTemplate("새로운 템플릿 파일 저장 디렉토리", ......); [/code]
이전 버전을 말끔히 지운 후 새버전으로 다시 설치하십시요. 다시 설치한 후에 캐시 디렉토리에 있는 이전 버전의 캐시를 지우기 바랍니다.

Posted by 방글24