最終更新: 2006-08-26 (土) 22:27:45
このページをDeliciousに追加 このページをはてなブックマークに追加 このページをlivedoor クリップに追加 このページをYahoo!ブックマークに追加

Ethna のテンプレートエンジンに Simplate を使う

概要

PHP extension として高速に動作するテンプレートエンジンである Simplate を、 Ethna で使えるようにしてみる。 簡単に導入できるように、 simplate クラスを継承して Smarty クラス(もどき)を定義する。 ただし PHP5 以上の環境が必要。 *1

インストール

Simplate のインストール

Simplate をダウンロードし、 Apache の共有モジュールとしてコンパイル。

$ cd /dev/shm
$ wget http://simplate.aimy.jp/archive/simplate-0.2.8.tar.gz
$ tar xvfz simplate-0.2.8.tar.gz
$ cd simplate
$ phpize
$ ./configure --enable-simplate
$ make
$ su
# make install

/etc/php5/apache2/php.ini, /etc/php5/cli/php.ini に以下の設定を追加。 *2

extension=simplate.so

以下のコマンドを実行し、Apache を再起動。

/etc/init.d/apache2 restart

Ethna_Simplate.php のインストール

Ethna_Simplate.php をダウンロードし、Ethna の class ディレクトリにインストール。

(以下、Ethna が /usr/share/php/Ethna にインストールされている場合)

# cd /dev/shm
# wget http://www.revulo.com/download/Ethna_Simplate.tar.gz
# tar xvfz Ethna_Simplate.tar.gz
# cp Ethna_Simplate.php /usr/share/php/Ethna/class/

Ethna.php の以下の行をコメントアウト。

include_once('Smarty/Smarty.class.php');

Ethna.php に以下の行を追加。

include_once(ETHNA_BASE . '/class/Ethna_Simplate.php');

テンプレート命名規則の変更

Simplate 0.2.8 以降ではこの作業は必要なくなったが、 便利な設定だと思うので、メモとして残しておく。

Simplate は、現在のところ、テンプレートのファイルを template/ja ディレクトリの直下にしか置けない。 つまり、テンプレートのファイル名は、login/do.tpl でなく login_do.tpl といった名前にする必要がある。

そのために、Ethna の公式ページの テンプレート定義省略時の命名規則を変更する の説明に従い、 Controller クラスのメソッドを以下のようにオーバーライドする。

function getDefaultForwardPath($forward_name)
{
    return $forward_name . '.' . $this->ext['tpl'];
}

function forwardPathToName($forward_path)
{
    $forward_path = preg_replace('/^\/+/', '', $forward_path);
    $forward_path = preg_replace(sprintf('/\.%s$/', $this->getExt('tpl')), '', $forward_path);

    return $forward_path;
}

テンプレートの書き換え

Simplate の文法は Smarty の文法のサブセットのようになっているので、 それに合わせて、各プロジェクトで用いるテンプレートを書き換える。 Simplate には Smarty 関数や修正子のような機能は無いので、 同等の機能の PHP の関数を用意して、そちらを呼ぶことで代用する。

Ethna のチュートリアルのサンプルを例にすると、 そのままだと以下の箇所で引っかかる。

{message name="password"}

とりあえず、Smarty 関数の message については、 error_message という PHP の関数を、 Ethna_Simplate.php の中で用意してあるので、 以下のような表記に書き換える。

{error_message('password')}
*1 simplate::simplate() メソッドを呼ぶとエラーになるので、__construct() を使っているため。
*2 コマンドライン版の PHP にも組み込まないと、ethna コマンドの実行時にエラーが出る。

(Counter:1, Today:1, Yesterday:0)
トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   最終更新のRSS