TOP書籍連動> 単純なテンプレートエンジン -Renderers
フレームワークの役割とその構築
フレームワークの役割とその構築

第4回:フレームワークの役割と構築方法 〜 後編

著者:Darryl Patterson   2006/8/15
前のページ  1  2  3
単純なテンプレートエンジン -Renderers

   前述のように、このフレームワークではテンプレートエンジンとして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へ移行したらインターフェースになるかも)を作るかもしれません。でも、今のところまだその必要はありません。


言語ラベル

   筆者たちのフレームワークでは、言語ラベルのことを国際化層と呼んでいます。まだ、フランス語と英語の2つの言語しか使えません。これには、主に二つの理由があります。まず、筆者たちはカナダにオフィスを持ち、カナダのクライアントから仕事を請け負うことが多いということがあげられます。

   次に、カナダでは公用語が2つあるので、Webサイトでも両方の言語をサポートしなくてはならないことがあげられます。こういうわけで、筆者は国際化をとても単純に実現することにしました。ユーザ側に表示されるテキストはすべて別々の言語ファイルに置かれています。

   すべてのモジュールが使用するグローバル言語ファイルと、それ以外に各モジュールには独自の言語ファイルがあります。フレームワークでは、これらの言語ラベルをすべてのモジュールで使える配列に読み込みます。この仕組みの詳細は、リスト6のloadLang()関数を見てください。

   今は2つの言語しかサポートしていませんが、サポートできる数に制限はありません。イメージも言語によって大きく異なることがあるので、イメージディレクトリにもenとfrのサブディレクトリがあります。図2を参照してください。

イメージディレクトリ
図2:イメージディレクトリ
(画像をクリックすると別ウィンドウに拡大図を表示します)

前のページ  1  2  3

PHPプログラマーズマガジン 書籍紹介
PHPプログラマーズマガジン

PHPプログラマーズマガジンは、PDF形式で読者の方にお届けするPHP言語(PHP: Hypertext Processor)専門誌です。 カナダMTA出版のphp|architect誌を日本語に翻訳し、独自の記事を加えて月刊でお届けしています。

発行:アシアル株式会社  価格:1,029円

 ご購入はこちら
http://www.phppro.jp/magazine/
Darryl Patterson
著者プロフィール
Darryl Patterson
1992年からWebプログラミングの仕事に従事している。彼はHTMLが使われはじめてから、その後Perl/CGI、Cold Fusion、ASPやPHPが使われるようになっていくWebの歴史とともに歩んできた。PHPでの開発は1998年から手がけており、今はトロントのEuro RSCG 4Dで開発チームのリーダー。また1995年からWebプログラミングをCentennial大学で教えており、そこでトロントのPHPユーザ会であるTorPUGを立ち上げた。


INDEX
第4回:フレームワークの役割と構築方法 〜 後編
  リクエストハンドラ
  Moduleベースのコード
単純なテンプレートエンジン -Renderers