イベント駆動型PHPフレームワークを作る その13

本日はViewを少々。
Viewには4つのディレクトリがあります。

  1. cache
  2. compile
  3. resource
  4. template

このうち上二つ(cache,compile)はSmartyの作業用に使われます。
resourceには言語ファイルが配備されます。
Simg版「Hello,world」は日本語と英語に対応していますから、2つファイルがあります。
resource.iniが日本語、resource.enが英語です。
Simgはパラメータ「_lang」に指定された値を拡張子としたresourceファイルを言語ファイルとして使います。
localhost?_lang=enとリクエストされれば言語ファイルとしてresource.enが使われます。
拡張子「ini」はデフォルト言語です。
パラメータ「_lang」が指定されていなければ、resource.iniが使われます。
従ってlocalhostとリクエストされればデフォルト言語(Hello,worldでは日本語)となります。

templateにはSmartyのtemplateが配備されます。
ところでSimgではページ関連の情報はconfigのpage.iniに定義されています。

[prefix]
template=TEMPLATE_
partial=PARTIAL_
smarty=SMARTY_
[template:partial]
HELLO=hello.tpl: BASE, CONTENTS
ERROR=error.tpl: BASE, ERROR
[partial]
BASE=bs
CONTENTS=co
ERROR=er
[smarty]
LANGUEGE=language

Simg版「Hello,world」ではhello.tplとerror.tplの2つのページがあります。
ところがtemplateディレクトリには、もうひとつbase.tplというtemplateがあります。
これは何でしょう。
実はhello.tplとerror.tplはbase.tplから派生したtemplateです。
以下はbase.tplです。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
{if isset($language)}
<html lang="{$language}">
{else}
<html>
{/if}
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>{#TITLE#}</title>
  </head>
  <body>
    {block name=contents}
    {/block}
  </body>
</html>

簡単ですが、headタグやbodyタグが定義されているほぼ完成された構成のhtmlファイルのようです。
以下はhello.tplです。

{extends file='base.tpl'}
{block name=contents}
  <p>{#MESSAGE#}</p>
{/block}

Smartyのblockでbase.tplのbody部分を定義していますね。
以下はerror.tplです。

{extends file='base.tpl'}
{block name=contents}
  <p>{$_error}</p>
{/block}

hello.tplとほぼ同じです。
表示される内容が違うようですね。
このようにSmartyのextendsでresponseの共通部分を定義できるので、重複の無いページのコーディングが可能になっています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です