CHTemplate PHP Extension Module

작성자: 나창호
회사: chcode.com
버전: $Revision: 1.2 $
고친날: $Date: 2006/12/16 09:07:13 $

CHCode CHTemplate: 사용자 메뉴얼

목차
1. 소개
2. 설치
2.1. 압축 파일 풀기
2.2. 동적라이브러리 복사하기
3. 사용법
4. 함수
4.1. set_file()
4.2. set_var()
4.3. set_data_row()
4.4. output()
4.5. page()
5. 예제
5.1. 기본 사용
5.2. 루프
5.3. 중첩 루프
5.4. page() 함수
5.5. IF문 블럭
6. 버그
7. 다운로드
8. 라이센스

1. 소개 
CHTemplate는 매우 빠르고, 쉽게 사용할 수 있는 PHP용 템플리트 엔진입니다.
빠른 속도를 위하여 C 언어로 개발되었으며, PHP 소스 코드의 재 컴파일 작업이 필요없는 동적 라이브러리 형태로 개발하였습니다.
2. 설치 
MS 윈도 계열 OS는 지원하지 않습니다. 설치는 root 권한이 있어야 합니다.

2.1. 압축 파일 풀기
2.2. 동적라이브러리 복사하기

2.1. 압축 파일 풀기 
다운로드 받은 chtemplate.tar.gz 압축 파일을 임의의 디렉토리로 복사한 다음, 아래 명령을 이용하여 chtemplate.tar.gz 압축 파일을 풉니다.

# gunzip chtemplate.tar.gz
# tar xvf chtemplate.tar

2.2. 동적 라이브러리 복사하기 
modules 디렉토리에 있는 chtemplate.so 동적라이브러리 파일을 PHP 확장 모듈 디렉토리로 복사합니다.

# cp chtemplate/modules/chtemplate.so [php_ext_dir]

PHP 확장 디렉토리 [php_ext_dir] 가 어디에 있는지 모를 경우.
웹 페이지를 하나 만든 다음 아래 코드를 넣고, 웹 브라우저를 통해 봅니다.
<?php echo phpinfo() ?>
"extenstion_dir" 변수를 통해 PHP 확장 모듈 디렉토리의 경로를 알 수 있습니다.

만약, SUN 솔라리스 또는 HP 유닉스와 같은 플렛폼인 경우 다음 명령을 이용하여 직접 소스 코드를 컴파일하여야 합니다.

# cd chtemplate/src
# phpize
# ./configure --with-php-config=/path/to/php-config
# make install

성공적으로 작업이 끝나면 modules 디렉토리에 새로운 chtemplate.so 파일이 생성되고, PHP 확장 모듈 디렉토리에 자동으로 chtemplate.so 파일이 복사됩니다.
3. 사용법 
CHTemplate는 HTML 유형의 문서뿐만아니라, 일반 텍스트, XML, WAP, 설정파일 등 어떠한 형태의 파일도 사용가능합니다.
기본적으로 다음과 같은 방법으로 CHTemplate를 손쉽게 사용할 수 있습니다.
  1. chtemplate.php 클래스 파일 지정: include("chtemplate.php");
  2. CHTemplate 오브젝트 생성: $tpl = new CHTemplate();
  3. 템플리트 파일 설정: $tpl->set_file("my_template.html");
  4. 변수 설정: $tpl->set_var("tag", $value);
  5. 페이지 출력: $tpl->output();

4. 함수 
CHTemplate 함수 설명입니다.

4.1. set_file()
4.2. set_var()
4.3. set_data_row()
4.4. output()
4.5. page()

4.1. set_file() 
사용할 템플리트 파일을 설정합니다.
include("chtemplate.php");
$tpl = new CHTemplate();
$tpl->set_file("my_template.html");
리턴값: 없음
4.2. set_var() 
템플리트 변수를 설정합니다.
$tpl = new CHTemplate();
$tpl->set_file("my_template.html");
$tpl->set_var("title", "제목입니다.");
my_template.html 템플리트에 [#title#] 라고 설정된 태그가 '제목입니다.'로 변환됩니다.
템플리트에서 설정하는 태그는 '[#' 와 '#]' 사이에 원한는 태그명을 적습니다. 공백 문자를 두어서는 않됩니다.

리턴값: 없음
4.3. set_data_row() 
루프를 위한 함수입니다. set_data_row() 함수를 이용하여 중첩 루프를 원하는 대로 사용할 수 있습니다.

my_php.php:
$tpl = new CHTemplate();
$tpl->set_file("my_template.html");

for ($i=0; $i < 100; $i++) {
    $tpl->set_var("count", $i);
    $tpl->set_data_row("loop_tag");
}
my_template.html:
<!-- BEGIN_LOOP loop_tag -->
[#count#]
<!-- END_LOOP loop_tag -->
템플리트에서 설정하는 루트 태그는 '<!-- BEGIN_LOOP 태그명 -->' 태그로 시작하고, '<!-- END_LOOP 태그명 -->' 태그로 끝납니다.

리턴값: 없음
4.4. output() 
변환된 템플리트 파일을 화면에 출력합니다.
output() 함수를 이용하여 변환된 템플리트 데이터는 특정 변수에 넣을 수 없습니다. 가령, $result=$tpl->output() 이렇게 할 수 없습니다. 변수에 넣기 위해서는 page() 함수를 이용해야 합니다.
$tpl = new CHTemplate();
$tpl->set_file("my_template.html");
$tpl->output();
리턴값: 없음
4.5. page() 
변환된 템플리트 데이터를 리턴합니다.
output 함수와 동일하지만, page 함수는 변환된 데이터를 화면에 출력하지 않고, 문자열로 리턴합니다.
$tpl = new CHTemplate();
$tpl->set_file("my_template.html");
$result = $tpl->page();
print $result;
page 함수를 이용하면 특정 파일을 템플리트 파일에 포함시킬 수 있습니다.
$tpl = new CHTemplate();
$tpl->set_file("header.txt");

$head = $tpl->page();

$tpl->set_file("my_template.html");
$tpl->set_var("header", $head);
$tpl->output();
리턴값: 변환된 템플리트 문자열
5. 예제 


5.1. 기본 사용
5.2. 루프
5.3. 중첩 루프
5.4. page() 함수
5.5. IF문 블럭

5.1. 기본 사용 
my_template.txt:
From: [#from#]
To: [#to#]
Subject: [#subject#]

[#message#]
my_php.php:
<?php

include("chtemplate.php");

$tpl = new CHTemplate();
$tpl->set_file("my_template.txt");
$tpl->set_var("from", "chna@chcode.com");
$tpl->set_var("to", "support@chcode.com");
$tpl->set_var("subject", "Hello CHTemplate");
$tpl->set_var("message", "Message Body");
$tpl->output();
?>
결과:
From: chna@chcode.com
To: support@chcode.com
Subject: Hello CHTemplate

Message Body

5.2. 루프 
my_template.txt:
<!-- BEGIN_LOOP loop_count -->
[#count#]<br>
<!-- END_LOOP loop_count -->
my_php.php:
<?php

include("chtemplate.php");

$tpl = new CHTemplate();
$tpl->set_file("my_template.txt");

for ($i=0; $i < 5; $i++) {
    $tpl->set_var("count", "No. $i");
    $tpl->set_data_row("loop_count");
}

$tpl->output();
?>
결과:
No. 1
No. 2
No. 3
No. 4
No. 5

5.2. 중첩 루프 
my_template.txt:
<!-- BEGIN_LOOP loop_count -->
[#count#]<br>
    <!-- BEGIN_LOOP loop_sub_count -->
    ([#sub_count#])
    <!-- END_LOOP loop_sub_count -->
<!-- END_LOOP loop_count -->
my_php.php:
<?php

include("chtemplate.php");

$tpl = new CHTemplate();
$tpl->set_file("my_template.txt");

for ($i=0; $i < 5; $i++) {
    $tpl->set_var("count", "No. $i");

    for ($j=0; $j < 3; $j++) {
        $tpl->set_var("sub_count", "$i-$j ");
        $tpl->set_data_row("loop_sub_count");
    }
    $tpl->set_data_row("loop_count");
}

$tpl->output();
?>
결과:
No. 1 (1-1 1-2 1-3)
No. 2 (2-1 2-2 2-3)
No. 3 (3-1 3-2 3-3)
No. 4 (4-1 4-2 4-3)
No. 5 (5-1 5-2 5-3)

5.4. page() 함수 
header.txt:
Content-Type: [#type#]
X-Mailer: [#mailer#]
my_template.txt:
[#header#]
From: [#from#]
To: [#to#]
Subject: [#subject#]

[#message#]
my_php.php:
<?php

include("chtemplate.php");

$tpl = new CHTemplate();
$tpl->set_file("header.txt");
$tpl->set_var("type", "text/html");
$tpl->set_var("mailer", "CHMailer 2.1");

$head = $tpl->page();

$tpl->set_file("my_template.txt");
$tpl->set_var("header", $head);
$tpl->set_var("from", "chna@chcode.com");
$tpl->set_var("to", "support@chcode.com");
$tpl->set_var("subject", "Hello CHTemplate");
$tpl->set_var("message", "Message Body");
$tpl->output();
?>
결과:
Content-Type: text/html
X-Mailer: CHMailer 2.1
From: chna@chcode.com
To: support@chcode.com
Subject: Hello CHTemplate

Message Body

5.5. IF문 블럭 
my_template.txt:
<!-- BEGIN_IF block -->
contents
<!-- END_IF block -->
my_php.php:
$tpl->set_var("block", "");  # IF문 블럭이 출력됩니다.
# 만약, $tpl->set_var("block", "")를 정의하지 않으면 IF문 블럭은 출력되지 않습니다. # 두번째 인수의 값이 어떤 것이든 IF문 블럭에서는 참조되지 않습니다.

6. 버그 
만약, 버그를 찾았거나, 문제점이 있으면 chna@chcode.com 으로 연락주십시요. 빠른 시간안에 패치 또는 수정에 대한 답변을 드리도록 하겠습니다.
7. 다운로드 
다운로드
8. 라이센스 
GPL을 따르며 소스 코드의 수정, 배포 등을 자유롭게 할 수 있습니다.