CI_Parser
「CI_Parser」ライブラリクラスは、簡易的なテンプレートエンジンの機能を提供します。 Smartyテンプレートエンジンの様な多くの機能は持ち合わせていません。
「CI_Parser」ライブラリクラスで実現できるテンプレートエンジンの機能は、擬似変数へのデータセット、 及び、連想配列データのループ処理だけです。
CodeIgniterのデフォルトのビュー(描画処理)は、テンプレートファイル内にPHPコードを埋め込む形で
実現しています。
もし、テンプレートファイル内にPHPコードを埋め込む形式を利用したくない場合は、
CodeIgniterのデフォルトのビュー(描画処理)から、「CI_Parser」ライブラリクラスによる
描画処理に置き換えることができます。
また、基本的にはCodeIgniterのデフォルトのビュー(描画処理)を使い、部分的に 「CI_Parser」ライブラリクラスの機能を利用することも可能です。
テンプレートファイル
テンプレートファイルは、通常通り「application/views/」ディレクトリに作成していきます。
擬似変数
「CI_Parser」クラスでの擬似変数とは、テンプレートファイルに「 { 」と「 } 」で囲まれた 文字列のことで、テンプレートに渡されたデータがこれに置き換えられます。
- テンプレート
<h1> {body_heading} </h1>
</body>
連想配列ループ
擬似変数をHTMLのタグのように「 {some_data}{/some_dta} 」開始タグ・閉じタグで記述し、 擬似変数として記述された文字列を添え字(インデックスキー)とした連想配列に、 ループ処理したいデータを配列でセットしテンプレートに渡すことで、配列の要素数だけループします。
連想配列の配列をセットすることでループ内の擬似変数を連想配列のデータで展開することができます。
- 連想配列
- テンプレート
- 出力結果
array( 'key' => 'key[]', 'val' => 'one'),
array( 'key' => 'key[]'), 'val' => 'two'),
array( 'key' => 'key[]'), 'val' => 'three'),
);
<input type="checkbox" name="{key}" value="{val}"> {val}&l;tbr>
{/somme_data}
two
three
CI_Parserのロード
「CI_Loader」クラスの「library()」メソッドでロードします。 「CI_Parser」ライブラリクラスは、設置情報を必要としないため、 第二引数に設定情報を指定する必要はありません。
データのパース処理
「CI_Parser」ライブラリクラスは、テンプレートファイルのテキストに対しデータをパースする他、 変数にセットされている文字列データに対してもデータをパースすることができます。
parse($template, $data, $return = FALSE)
テンプレートファイルのパース処理
第一引数に「application/views/」ディレクトリにあるテンプレートファイル名から拡張子「.php」を
取り除いたテンプレート名を指定します。
第二引数には、パースする連想配列データを指定します。
第三引数にTRUEを指定すると、パース後の文字列データを出力せず、データを返します。
デフォルトでは出力する指定になっています。
$data['body_heading'] = 'とあるページです。;
$data['some_data'] = array
array( 'key' => 'key[]', 'val' => 'one'),
array( 'key' => 'key[]'), 'val' => 'two'),
);
$this->parser->parse('my_template', $data);
parse_string($template, $data, $return = FALSE)
変数データのパース処理
第一引数にテンプレートテキストデータとして文字列を指定します。
第二引数には、パースする連想配列データを指定します。
第三引数にTRUEを指定すると、パース後の文字列データを出力せず、データを返します。
デフォルトでは出力する指定になっています。
$data['body_heading'] = 'とあるページです。;
$string = '<h1>{body_heading}</h1>';
$this->parser->parse_string($string, $data);
区切り文字の変更
デフォルトの擬似変数区切り文字は「 { 」と「 } 」ですが、これを任意のものに変更することができます。
set_delimiters($l = '{', $r = '}')
第一引数に開始文字列、第二引数に閉じ文字列を指定します。
$this->parser->set_delimiters('[[', ']]');
$data['body_heading'] = 'とあるページです。;
$string = '<h1>[[body_heading]]</h1>';
$this->parser->parse_string($string, $data);