第3回 ブログツールで学ぶ実践的Zend Frameworkの使い方「Zend Framework」で加速するPHP開発(4/5 ページ)

» 2007年03月08日 07時30分 公開
[杉田直哉,ITmedia]

ビュースクリプト

 ビュースクリプトは、大きく分けてHTMLの全体構造を格納したBlogViewと、管理画面用のAdminViewの2つに分かれます。

  • ブログ閲覧用HTMLを出力するBlogView

 前述したように、Blog ControllerではビュースクリプトとしてBlogView.phpが指定されていました。BlogView.phpは、ブログ全体のレイアウトを決定するもので、HTMLのdivタグで、ヘッダ/フッター/サイドバー/コンテンツといった4つの部分に分け、中身はそれぞれ個別のPHPスクリプトへ委譲しています(リスト10)。このように、ビュースクリプトの中でさらに別のビュースクリプトをrenderで読み込む場合でも、assignされた変数などはそのまま受け継がれます。


<div id="page">
  <div id="header">
    <?php echo $this->render('Pages/Blog/Header.php'); ?>
  </div>
  <div id="sidebar">
    <div id="sidebarInt">
      <?php echo $this->render('Pages/Blog/Sidebar.php'); ?>
    </div>
  </div>
  <div id="content">
    <div id="contentInt">
      <?php echo $this->render('Pages/Blog/Index.php'); ?>
    </div>
  </div>
  <div>
    <?php echo $this->render('Pages/Blog/Footer.php'); ?>
  </div>
</div>

リスト10 HTMLの全体構造が格納されたBlogView.php

 コンテンツを表示する「Pages/Blog/Index.php」では、assignされた$model配列に含まれるposts変数に対して、foreach文の処理が行われています(リスト11)。posts変数にはブログの各エントリ(=post)が配列で代入されているので、各エントリの表示がプレゼンテーションロジックを通してこのスクリプト内で行われるわけです。


<?php
foreach ($this->posts as $post) {
?>
<div class="entry"><h2><?php echo $post['title']; ?></h2>
<div class="info"><div class="date">Written on <?php echo date('F d, Y', $post['published']); ?>
                        :
                        :

リスト11 コンテンツを表示する「Pages/Blog/Index.php」のコード
  • 管理画面を出力するAdminView

 AdminView.phpでは、ログイン画面の表示しか行っていません(リスト12)。ログイン後の画面は「Pages/Admin/Posts.php」のビュースクリプトでレンダリングされます。「Pages/Admin/Post.php」は、Admin Controllerの項で説明したHTMLフォームからの受け渡しを行うビュースクリプトとなります。


<form method="post">
<?php
  foreach ($this->errors as $error) {
    echo '<span style="color: red;">' . $error . '</span><br/>';
  }
?>
Title:
<?php
  echo $this->formText('title', $this->post['title'], array('size' => 60));
?>
<br/>
Content:<br/>
<?php
  echo $this->formTextarea('content', $this->post['content'], array('cols' => 60, 'rows' => 20));
?>
<br/>
Tags:
<?php
  for($i = 0; $i < 5; $i++) {
    echo $this->formText('tags[]', $this->post['tags'][$i]);
  }
?>
<br/>
<input type="submit" id="save" name="save" value="save"/>   
<input type="submit" id="delete" name="delete" value="delete" onclick="return confirm('Are you sure?');"/>
</form>

リスト12 AdminViewのコード

 このHTMLフォームは、コントローラの中で指定したヘルパーを利用しています。「$this->formText」のように参照して、idとなる名称と編集の場合に表示されるvalue、フォームのサイズをarrayで渡しています。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ