Zend Framework と Smarty と Layout 機能その1
PHPの種 ブログさん経由。
簡単な Zend_Layout Example | プログラムの種 ブログ
Zend Framework には symfony や CakePHP にある Layout 機能が標準ではない。
PHP の種ブログさんで紹介されているのは、Zend_View を使用した Layout を実現しようとするもの。
Zend_View を使用する場合には参考になると思う。
そもそも Layout とは
Zend Framework にはその機能がないため、ドキュメントには
記載されていないので、CakePHP のドキュメントから引用すると、
レイアウト(layout)とは、ビューの周りの部分を囲む、外観すべてのコードを含んだものです。
http://www.cakephp.jp/doc/views.html#id4808138
とある。
いちいち共通のヘッダやらフッタをそれぞれのテンプレートに
書くのは非効率なので、Layout という共通のテンプレートを作り、
その中に個別のコンテンツを埋め込む。
Smarty で Layout 機能を実現するには、いくつか方法がある。
Smarty の テンプレートファイル内で include file を使う方法
- コンテンツとなるテンプレートのファイルパスを取得する
- Layout テンプレートにコンテンツのファイルパスをアサインする
- コンテンツに値をアサインする
- Layout テンプレートを Smarty の fetch メソッドを使用して取得する
- fetch した Layout テンプレートを echo する
<?php $smarty->template_dir = "layout.tpl"; $contents = "contents.tpl"; $title = "タイトル"; $smarty->assign("title", $title); $smarty->assign("param", "this is a content"); $smarty->assign("contents", $contents); echo $smarty->fetch("layout.tpl");
layout.tpl
<html> <head> <title>{$title|escape}</title> </head> <body> <div id="header">ヘッダー</div> <div id="contents"> {include file=$contents} </div> <div id="header">フッター</div> </body> </html>
contents.tpl
{$param|escape}
include file を使用して、テンプレートを埋め込むやり方。
コンテンツとなるテンプレートファイルの中身を取得し、コンテンツ自体を assign してしまう方法
この方法はウノウラボに詳細な記述があるので、そちらを参照。
http://labs.unoh.net/2007/06/smartyrails.html
上記の違いは、include file を使ってコンテンツを取得するのか、
コンテンツを fetch してコンテンツを取得するのかの違いだけで、
結局の所はコンテンツを取得して、レイアウトのテンプレートに
アサインするには変わらない。
# 他にも方法があるのかな。。。
Zend Framework を絡めた Layout の設定はまた後で記述する。