CodeIgniter User Guide Version 1.7.2


템플릿 파서 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);