いろいろ準備中

[Zend Framework] Zend_Layout ① 使いどころなど

5月 30th, 2008 Posted in Zend Framework

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スクリプトに分けるようなことは皆さんもごく自然にやっているのではないかと思います。私は以下のようにやっていました。

<html>
...
<body>
  <div id="contents">
    <div id="menu">
      <!-- メニュー表示(すべての画面でつかう)-->
      < ?php require '/path/to/view/script/share/menu.phtml'; ?>
    </div>
    <div id="list">
      <h3>< ?php echo $this->list_type ?>の一覧表示</h3>
      <!-- リスト表示(新着順、検索結果、タグ絞込みなどで使いまわす)-->
      < ?php require '/path/to/view/script/share/list.phtml'; ?>
    </div>
    <div id="footer">
      <!-- フッタ(すべての画面で使う)-->
      < ?php require '/path/to/view/script/share/footer.phtml'; ?>
    </div>
  </div>
</body>
</html>

これだとある条件、例えばリストに表示する件数が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; ?>

このようにやる場合、Zend_Layoutを使ったほうが便利だということがわかりました。

実際にどのように使うのか、続きは次回書きます。

コメントを投稿する