レイアウトその1

で、ついでなので管理画面っぽく、レフトメニューがあって作業を選べるようなページレイアウトに変更します。

/cake/libs/view/layouts/default.ctp がもともとのレイアウトファイルなので、これを開いて参考にしながら、自分の admin 用のレイアウト admin.ctp を作ります。 それは /app/views/layouts に保存します。

/app/views/layouts/admin.ctp

今まで add.ctp などをいじってきて気がついていると思いますが、フォームなどのメイン部分の下に、左メニュー部分が Actions として入っています。

つまり全体としては、こんな構造になっていて、

<div id="header"></div>
<div id="content">
    <div class="members form"></div>
    <div class="actions"></div>
</div>

各ページのテンプレート($content_for_layout の中に入る部分)が、
    <div class="members form"></div>
    <div class="actions"></div>
になっている、という訳です。

ということで、このactionsを分離して、レイアウトの方に入れてしまいます。

add.ctp から

<div class="actions">
 <h3><?php __('Actions'); ?></h3>
 <ul>

  <li><?php echo $this->Html->link(__('List Members', true), array('action' => 'index'));?></li>
  <li><?php echo $this->Html->link(__('List Types', true), array('controller' => 'types', 'action' => 'index')); ?> </li>
  <li><?php echo $this->Html->link(__('New Type', true), array('controller' => 'types', 'action' => 'add')); ?> </li>
  <li><?php echo $this->Html->link(__('List Favorites', true), array('controller' => 'favorites', 'action' => 'index')); ?> </li>
  <li><?php echo $this->Html->link(__('New Favorite', true), array('controller' => 'favorites', 'action' => 'add')); ?> </li>
 </ul>
</div>
この部分をカットし、admin.ctp (もともとはdefault.ctp)の $content_for_layout の下ににコピーします。

<?php
/**
 *
 * PHP versions 4 and 5
 *
 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
 * Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
 *
 * Licensed under The MIT License
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
 * @link          http://cakephp.org CakePHP(tm) Project
 * @package       cake
 * @subpackage    cake.cake.libs.view.templates.layouts
 * @since         CakePHP(tm) v 0.10.0.1076
 * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
 */
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <?php echo $this->Html->charset(); ?>
 <title>
  <?php __('CakePHP: the rapid development php framework:'); ?>
  <?php echo $title_for_layout; ?>
 </title>
 <?php
  echo $this->Html->meta('icon');

  echo $this->Html->css('cake.generic');

  echo $scripts_for_layout;
 ?>
</head>
<body>
 <div id="container">
  <div id="header">
   <h1><?php echo $this->Html->link(__('CakePHP: the rapid development php framework', true), 'http://cakephp.org'); ?></h1>
  </div>
  <div id="content">

   <?php echo $this->Session->flash(); ?>

   <?php echo $content_for_layout; ?>

   <div class="actions">
    <h3><?php __('Actions'); ?></h3>
    <ul>
     <li><?php echo $this->Html->link(__('List Members', true), array('action' => 'index'));?></li>
     <li><?php echo $this->Html->link(__('List Types', true), array('controller' => 'types', 'action' => 'index')); ?> </li>
     <li><?php echo $this->Html->link(__('New Type', true), array('controller' => 'types', 'action' => 'add')); ?> </li>
     <li><?php echo $this->Html->link(__('List Favorites', true), array('controller' => 'favorites', 'action' => 'index')); ?> </li>
     <li><?php echo $this->Html->link(__('New Favorite', true), array('controller' => 'favorites', 'action' => 'add')); ?> </li>
    </ul>
   </div>
  </div>
  <div id="footer">
   <?php echo $this->Html->link(
     $this->Html->image('cake.power.gif', array('alt'=> __('CakePHP: the rapid development php framework', true), 'border' => '0')),
     'http://www.cakephp.org/',
     array('target' => '_blank', 'escape' => false)
    );
   ?>
  </div>
 </div>
 <?php echo $this->element('sql_dump'); ?>
</body>
</html>

こんな感じになります。

そして、<div class="actions"> の中を書き換えます。

   <div class="actions">
    <h3><?php __('メニュー'); ?></h3>
    <ul>
     <li><?php echo $this->Html->link(__('会員管理', true), array('controller'=>'members','action' => 'index'));?></li>
     <li><?php echo $this->Html->link(__('担当者アカウント管理', true), array('controller' => 'users', 'action' => 'index')); ?> </li>
     <li><?php echo $this->Html->link(__('ログアウト', true), array('controller' => 'users', 'action' => 'logout')); ?> </li>
    </ul>
   </div>

で、一旦このレイアウトを確認します。 /app/controllers/members_controller.php を開いて、 var $name = 'Members'; の下に、

class MembersController extends AppController {

    var $name = 'Members';

    function beforeFilter() {
        $this->layout = 'admin';
    }
とレイアウトの指定を追加します。(上記5〜7行目)

ブラウザで見てみます。