前述のように、このフレームワークではテンプレートエンジンとしてHTML_Template_ITを使用しています。最も気に入っているのは単純なところです。使い方を覚えるのが簡単で、必要なことは何でもこなせるようにできるだけの柔軟性があります。
テンプレートを2つに分けて見ていきます。「master」テンプレートと、「action」テンプレートがあります。フレームワークで、モジュールから処理されたレスポンスを受け取って表示するのがレンダラと呼ばれるものです。HTMLのレンダラだけを使用するサイトがほとんどですが、プロジェクトで必要なら、RSS、ATOM、SOAP、WMLのレンダラを作ることができます。
リスト7にHTML_Template_ITを拡張したHTMLRenderer クラスのコードを示します。また、重要なのはレンダラはフレームワークの一部ではないということです。不思議に思われるかもしれませんが、これにはちゃんと理由があります。プロジェクトごとにレンダリングに対するニーズは様々です。筆者たちはすべてのプロジェクトで大抵次のようなことを確認しておきます。
- グローバルナビゲーションはあるか?
- ローカルナビゲーションはあるか?
- 第3のナビゲーションはあるか?
- ログイン、ログアウト機能のリンクは必要か?
- 特別なCSSを読み込む必要はあるか?
表3:レンダリングに対するニーズ
リスト7
<?php
require_once('common/util/class-EnvironmentFactory.php');
require_once 'HTML/Template/IT.php';
⁄**
*
*
* @author Darryl Patterson <darryl.patterson@eurorscg.com>
* @copyright Euro RSCG 4D
*
*⁄
class HTMLRenderer extends HTML_Template_IT {
var $config;
var $env;
function HTMLRenderer($title='', $tplFile='main.tpl')
{
$this->config = Config::instance();
$envFactory = new EnvironmentFactory(
$this->config->getEnvironmentClassName());
$this->env = $envFactory->createInstance();
$templatePath = $this->config->applicationRoot
. 'include/tpl';
parent::HTML_Template_IT($templatePath);
$this->loadTemplatefile($tplFile, true, true);
$this->setVariable('TITLE', $title);
}
function setContent($content)
{
$this->setVariable('CONTENT', $content);
}
function render()
{
$this->setVariable('LANG', $this->env->lang);
foreach ($module->langLabels as $key => $label){
$key = 'LANG_' . $key;
$this->setVariable($key, $label);
}
$this->show();
}
}
?>
大体わかると思いますが、プロジェクトによってレンダラは大きく異なります。プロジェクトごとに独自のレンダラがあり、筆者たちは将来的にはレンダラのスーパークラス(またはPHP5へ移行したらインターフェースになるかも)を作るかもしれません。でも、今のところまだその必要はありません。
|