Zend Framework 1.5からZend_Layoutが追加されています。興味はあったのですが、リファレンスガイドやその他ちょっと調べてもいまいち良くわからなかったので敬遠していましたが、このたびAkra’s DevNotesのブログでとてもわかりやす解説を見つけて理解するにいたったのでここに書くことにしました。 Zend_Layoutは有名な「2ステップビューパターン」を実装したものと書いてあります。私はこの「2ステップビューパターン」というものを良く知りませんでした。Akra’s DevNotesには以下のように書いてあります。``` The view is now two-step. This means that we split our HTML between multiple files. The first step is to render the “inner” scripts, such as the sidebar and the action specific scripts. Then we render the “outer”, layout script which embeds the rendered “inner” scripts.

意訳すると、HTMLをいくつかのスクリプトに分けて、まずinnerスクリプトを描画したあとに、innerスクリプトが組み込んであるouter レイアウトスクリプトを描画するとあります。outerスクリプトがレイアウトにあたる部分で、innerスクリプトがコンテンツにあたる部分になります。 私もそうだったのですが、このようにinnerスクリプトとouterスクリプトに分けるようなことは皆さんもごく自然にやっているのではないかと思います。私は以下のようにやっていました。

  < ?php require '/path/to/view/script/share/menu.phtml'; ?>

< ?php echo $this->list_type ?>の一覧表示

  < ?php require '/path/to/view/script/share/list.phtml'; ?>




  
  < ?php require '/path/to/view/script/share/footer.phtml'; ?>

これだとある条件、例えばリストに表示する件数が0件の場合に、スクリプト内にif文を書くことになってしまいます。個人差はあると思いますが、私はあまり好きではないです。ここで、 < ?php require ‘/path/to/view/script/share/list.phtml’; ?>

の部分について、コントローラ側であらかじめスクリプトファイルのパスをアサインしておきます。 if($search_reault_cnt == 0) { $this->view->list = ‘/path/to/view/script/share/no_list.phtml’; … } else { $this->view->list = ‘/path/to/view/script/share/list.phtml’; … }

そして、スクリプトファイルの先ほどの部分を以下のように修正します。 < ?php require $this->list; ?>