2つのテンプレートを使う
通常ウェブデザインをする際は、基本的な枠組み(例えばヘッダとフッタとか)は全ページで共通したものを使用し、その間に挟まれるコンテンツ部分のみを変更するのが一般的だ。つまり共通するテンプレートを用意し、コンテンツ部分のテンプレートをころころ入れ替えるわけだ。
mojaviでこれを実行するには以下の方法を使えばよい(と思う)。記述はviewクラスの中に記述する。
(1) $myRenderer->setTemplate(‘contents.tpl’);
(2) $myRenderer->setMode(RENDER_VAR);
(3) $contents=$myRenderer->fetchResult($controller,$request,$user);
(4) $myRenderer->setMode(RENDER_CLIENT);
(5) $myRenderer->setAttribute(‘contents’,$contents);
(6) $myRenderer->setTemplate(‘global.tpl’);
(7) return $myRenderer;
ちなみにcontents.tplはコンテンツ部分のみのテンプレート、global.tplは枠のテンプレートになる。通常の場合であれば(1)のあとに(7)がきて終わりになる。そこに(2)から(6)のスクリプトを足す。
(2)でレンダリングモードを変更する。ActionChainで呼ばれない限り、レンダリングモードは通常RENDER_CLIENT(CLIENTに向けてレンダリングする)になっている。それを一時的にRENDER_VAR、すなわりVAR(変数)に向けてレンダリングするように変更するのだ。この一時的な設定変更により(3)でレンダリング内容を変数に格納することができる。
変数に格納したらレンダリングモードを元に戻し(4)、取得したコンテンツを枠のテンプレートに格納する(5)(6)。
これでできあがり。