このエントリーをはてなブックマークに追加

更新日: 2016年2月25日

実行時間: 0.0075

CI_Parser

 「CI_Parser」ライブラリクラスは、簡易的なテンプレートエンジンの機能を提供します。 Smartyテンプレートエンジンの様な多くの機能は持ち合わせていません。

 「CI_Parser」ライブラリクラスで実現できるテンプレートエンジンの機能は、擬似変数へのデータセット、 及び、連想配列データのループ処理だけです。

 CodeIgniterのデフォルトのビュー(描画処理)は、テンプレートファイル内にPHPコードを埋め込む形で 実現しています。
 もし、テンプレートファイル内にPHPコードを埋め込む形式を利用したくない場合は、 CodeIgniterのデフォルトのビュー(描画処理)から、「CI_Parser」ライブラリクラスによる 描画処理に置き換えることができます。

 また、基本的にはCodeIgniterのデフォルトのビュー(描画処理)を使い、部分的に 「CI_Parser」ライブラリクラスの機能を利用することも可能です。

テンプレートファイル

 テンプレートファイルは、通常通り「application/views/」ディレクトリに作成していきます。

 擬似変数

 「CI_Parser」クラスでの擬似変数とは、テンプレートファイルに「 { 」と「 } 」で囲まれた 文字列のことで、テンプレートに渡されたデータがこれに置き換えられます。

    • テンプレート
    <body>
      <h1> {body_heading} </h1>
    </body>

 連想配列ループ

 擬似変数をHTMLのタグのように「 {some_data}{/some_dta} 」開始タグ・閉じタグで記述し、 擬似変数として記述された文字列を添え字(インデックスキー)とした連想配列に、 ループ処理したいデータを配列でセットしテンプレートに渡すことで、配列の要素数だけループします。

 連想配列の配列をセットすることでループ内の擬似変数を連想配列のデータで展開することができます。

    • 連想配列
    $data['some_data'] = array(
        array( 'key' => 'key[]', 'val' => 'one'),
        array( 'key' => 'key[]'), 'val' => 'two'),
        array( 'key' => 'key[]'), 'val' => 'three'),
    );
    • テンプレート
    {somme_data}
    <input type="checkbox" name="{key}" value="{val}"> {val}&l;tbr>
    {/somme_data}
    • 出力結果
    one
    two
    three

CI_Parserのロード

 「CI_Loader」クラスの「library()」メソッドでロードします。 「CI_Parser」ライブラリクラスは、設置情報を必要としないため、 第二引数に設定情報を指定する必要はありません。

    $this->load->library('parser');

データのパース処理

 「CI_Parser」ライブラリクラスは、テンプレートファイルのテキストに対しデータをパースする他、 変数にセットされている文字列データに対してもデータをパースすることができます。

parse($template, $data, $return = FALSE)
テンプレートファイルのパース処理

 第一引数に「application/views/」ディレクトリにあるテンプレートファイル名から拡張子「.php」を 取り除いたテンプレート名を指定します。
 第二引数には、パースする連想配列データを指定します。
 第三引数にTRUEを指定すると、パース後の文字列データを出力せず、データを返します。 デフォルトでは出力する指定になっています。

    $this->load->library('parser');
    $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を指定すると、パース後の文字列データを出力せず、データを返します。 デフォルトでは出力する指定になっています。

    $this->load->library('parser');
    $data['body_heading'] = 'とあるページです。;
    $string = '<h1>{body_heading}</h1>';
    $this->parser->parse_string($string, $data);

区切り文字の変更

 デフォルトの擬似変数区切り文字は「 { 」と「 } 」ですが、これを任意のものに変更することができます。

set_delimiters($l = '{', $r = '}')

 第一引数に開始文字列、第二引数に閉じ文字列を指定します。

    $this->load->library('parser');
    $this->parser->set_delimiters('[[', ']]');
    $data['body_heading'] = 'とあるページです。;
    $string = '<h1>[[body_heading]]</h1>';
    $this->parser->parse_string($string, $data);