템플릿 파서 Template Parser Class
템플릿파서 클래스를 이용하시면 뷰파일에 포함된 모조변수(pseudo-variables)를 파싱할수 있습니다. 단순한 변수나 변수,태그 쌍 모두 파싱가능합니다.템플릿엔진을 사용해보신적이 없나요 ? 모조변수는 아래와같은 형태랍니다:
<html>
<head>
<title>{blog_title}</title>
</head>
<body>
<h3>{blog_heading}</h3>
{blog_entries}
<h5>{title}</h5>
<p>{body}</p>
{/blog_entries}
</body>
</html>
이변수들은 실재 PHP 변수는 아닙니다. 오히려 일반 텍스트에 가까우며, 이변수들을 통해서 PHP 코드를 템플릿(뷰 파일)에서 제거할 수 있습니다.
참고: 뷰파일에서 순수 PHP를 사용하시는것이 약간 더 빨리 동작하므로, 본 클래스를 반드시 사용하실필요는 없습니다. 그러나, 어떤 개발자들은 PHP를 모르는 디자이너와 같이 일할때 템플릿 엔진을 사용하는것을 더 선호하는 경우도 있습니다.
추가 참고: 템플릿파서 클래스는 완전한 템플릿 파싱 솔루션이 아닙니다. 우리는 성능의 극대화 쪽으로 많이 신경썼습니다.
클래스 초기화 Initializing the Class
CodeIgniter에 있는 대부분의 다른 클래스들처럼, 파서클래스도 $this->load->library 함수로 초기화 합니다:
$this->load->library('parser');
일단 로드되면,파서 라이브러리 객체는 $this->parser 를 통해 사용합니다.
아래의 함수들이 본 라이브러리에서 사용가능합니다:
$this->parser->parse()
이 메소드는 템플릿 이름과 데이터베열을 입력받으며, 파싱된 결과를 생성합니다. 예:
$this->load->library('parser');
$data = array(
'blog_title' => 'My Blog Title',
'blog_heading' => 'My Blog Heading'
);
$this->parser->parse('blog_template', $data);
첫번째 파라미터는 뷰파일(view file)의 이름(예제에서는 blog_template.php)을 포함하며, 두번째 파라미터는 템플릿에서 대체될 데이터의 연관배열 입니다. 위 예제에서 , 템플릿은 두개의 변수를 포함합니다: {blog_title} 와 {blog_heading}
"echo"를 사용할 필요가 없으며 $this->parser->parse()함수에서 리턴되는 데이터에대해서 뭔가 작업해줄 필요가 없습니다. 결과는 자동으로 출력클래스로 보내져 브라우저로 전송됩니다. 그러나, 출력클래스로 보내는대신 데이터를 리턴받으시려면 세번째 파라미터를 TRUE 로 설정합니다:
$string = $this->parser->parse('blog_template', $data, TRUE);
변수 쌍 Variable Pairs
위의 예제에서는 단순 변수치환을 보여주었습니다. 만약 여러분이 각 반복마다 다른 데이터를 가지고 있는 변수블럭전체를 반복적으로 처리하고싶다면, 본 페이지의 처음에 보여주었던 예제를 보세요:
<html>
<head>
<title>{blog_title}</title>
</head>
<body>
<h3>{blog_heading}</h3>
{blog_entries}
<h5>{title}</h5>
<p>{body}</p>
{/blog_entries}
</body>
</html>
위 예제를 보시면 변수 쌍이 있다는것을 아실거예요: {blog_entries} 데이터들.. {/blog_entries}. 이런경우 , 이 쌍들 사이에 있는 데이터덩어리들은 여러번 반복되며, 결과셋의 열수에 대응하여 작동됩니다.
변수쌍은 위의 단순변수치환예제와 동일한 코드로 파싱되나,변수쌍에 대응하는 다차원배열을 추가하셔야 합니다. 다음예제를 참고하시죠:
$this->load->library('parser');
$data = array(
'blog_title' => 'My Blog Title',
'blog_heading' => 'My Blog Heading',
'blog_entries' => array(
array('title' => 'Title 1', 'body' => 'Body 1'),
array('title' => 'Title 2', 'body' => 'Body 2'),
array('title' => 'Title 3', 'body' => 'Body 3'),
array('title' => 'Title 4', 'body' => 'Body 4'),
array('title' => 'Title 5', 'body' => 'Body 5')
)
);
$this->parser->parse('blog_template', $data);
만약 쌍으로 구성된 데이터가 데이터베이스 결과셋이라면 result_array() 함수를 통해서 간단히 다차원 배열을 만들수 있습니다:
$query = $this->db->query("SELECT * FROM blog");
$this->load->library('parser');
$data = array(
'blog_title' => 'My Blog Title',
'blog_heading' => 'My Blog Heading',
'blog_entries' => $query->result_array()
);
$this->parser->parse('blog_template', $data);