CodeIgniter ユーザガイド 日本語版 Version 2.0.3


テンプレートパーサクラス

テンプレートパーサクラスを使うと、ビューファイルに含まれる擬似変数を解析できます。 単一の擬似変数と擬似変数のペアを解析できます。テンプレートエンジンを一度も使ったことがないでしょうか?擬似変数とは次のようなものです:

<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を取り除くための、 普通のテキストです。

Note: ビューページで純粋なPHPを使う方が少し早いので、CodeIgniterでは、 このクラスを必ずしも 必要としません。しかし、PHPのコードで混乱してしまうデザイナーと一緒に仕事をしている場合、 開発者の中には、テンプレートエンジンを使用したい人もいると思います。

Also Note: テンプレートパーサクラスは、本格的なテンプレート解析ソリューションではありません。 私達は、パフォーマンス最大化のために、これを非常にスマートにしています。

クラスの初期化

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);

第1引数は、ビューファイルの名前(この例では、ファイルは、blog_template.phpという名前です)になり、 第2引数は、テンプレートに渡すデータの連想配列になります。 上の例では、テンプレートには、次の2つの擬似変数が含まれています: {blog_title} と {blog_heading}

$this->parser->parse() メソッドが返す値は、"echo" で出力したりする必要はありません。 ブラウザに送信するために、出力クラスに自動的に渡されます。しかし、出力クラスにデータを渡す代わりに、 データを返すようにするために、第3引数にTRUEを設定することができます:

$string = $this->parser->parse('blog_template', $data, TRUE);

$this->parser->parse_string()

このメソッドは parse() と全く同じ働きを持ちますが、ビューファイルの代わりに文字列だけを第1引数で受け付けます。

ペアの擬似変数

上のサンプルコードは、単一の擬似変数が置き換えられるものです。 全部の変数ブロックを毎回新しい値を使って繰り返させたい場合は、どのようなものになるのでしょうか。ページの先頭で示したサンプルのテンプレートで考えてみます:

<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);