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