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

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

ご覧のとおりpage.iniは4つのsectionから構成されています。
最初のsection「prefix」はそれぞれのsectionで定義する定数のプレフィクスです。
例えばsection「template:partial」のHELLOはSimgによりTEMPLATE_HELLOとdefineされます。
section「prefix」は無くても構いません。
でも定数って用途に応じてprefixを付けたくなるのが人情ですよね。
ですから、

[template:partial]
TEMPLATE_HELLO=hello.tpl: PARTIAL_BASE, PARTIAL_CONTENTS
TEMPLATE_ERROR=error.tpl: PARTIAL_BASE, PARTIAL_ERROR

のように冗長な記述をしなくても良いようになっているのです。
ところでsection「template:partial」って妙ですよね。
これは左辺が「template」、右辺が「partial」という意味で、section「prefix」で定義したprefixがそれぞれに適用されます。

section「template:partial」は左辺がtemplate、右辺がpartialで、

  • TEMPLATE_HELLOはhello.tplを指し、このtemplateの内容はPARTIAL_BASEとPARTIAL_CONTENTSにより構成されています。
  • TEMPLATE_ERRORはerror.tplを指し、このtemplateの内容はPARTIAL_BASEとPARTIAL_ERRORにより構成されています。

以上のような内容を表しています。
Renderが、このpartialを目印に処理を決定しているのは、以前に申した通りです。

section「partial」は、section「template:partial」で使われているpartialを定義しています。
section「template:partial」で記述した場合は、必ずここで定義して下さい。

section「smarty」は、それぞれのtemplateで参照されているSmarty変数です。
Smartyのassign関数で利用する変数名を定義します。
base.tplではhtmlタグのlang属性でSmarty変数を参照しています。

<!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}

ここはPARTIAL_BASEと対応させています。
(page.iniのsection「smarty」でロジカルに定義すべきですが、Simgはそこまで厳密に規定していません。)
サンプルでは以下のRenderクラスがPARTIAL_BASEを処理しています。

class BaseRender extends SimgRender {
  public function rendering($event, $output, $parameter, $db) {
    if($output->hasPartial(PARTIAL_BASE)) {
      $v = simg_get_value($parameter->get(SIMG_PARAM_LANGUAGE), 'ini');
      switch ($v) {
      case 'ini':
        $lang = 'ja';
        break;
      default:
        $lang = $v;
      }
      $output->assign(SMARTY_LANGUEGE, $lang);
    }
  }
}

コメントを残す

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