本日はViewを少々。
Viewには4つのディレクトリがあります。
- cache
- compile
- resource
- 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の共通部分を定義できるので、重複の無いページのコーディングが可能になっています。