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); } } }