レイアウトその2

続いて、一般の人が登録したり、ログインして編集する画面(公開側)のレイアウトを作ります。 通常公開側はデザイナーさんがカッチリデザインしてくるものですから、どっちみち最終的にそのデザインに合わせて調整することになると思います。 ということで、ここでは admin 側をそのまま流用してファイルだけ作っておくことにします。

まず、先ほど作った

/app/views/layouts/admin.ctp
をそのまま同じ場所にコピーして、member.ctp にリネームします。
/app/views/layouts/member.ctp

そして左メニューの部分を以下のように編集します。

            <div class="actions">
                <h3><?php __('メニュー'); ?></h3>
                <ul>
                    <li><?php echo $this->Html->link(__('登録情報変更', true), array('controller'=>'members','action' => 'edit'));?></li>
                    <li><?php echo $this->Html->link(__('退会', true), array('controller' => 'members', 'action' => 'delete')); ?> </li>
                    <li><?php echo $this->Html->link(__('ログアウト', true), array('controller' => 'users', 'action' => 'logout')); ?> </li>
                </ul>
            </div>

member.ctp のヘッダー部の以下の部分、

<head>
    <?php echo $this->Html->charset(); ?>
    <title>
        <?php echo $title_for_layout; ?>
    </title>
    <?php
        echo $this->Html->meta('icon');

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

        echo $scripts_for_layout;
    ?>
</head>
cssを指定しているところを以下のように書き換えます。

        echo $this->Html->css('member');

これで出力されるソースは

<link href="/~myname/cake/css/member.css" type="text/css" rel="stylesheet">
となります。

css の置き場所は /app/webroot/css/ ですので、

/app/webroot/css/cake.generic.css
をそのまま同じ場所にコピーして、member.css にリネームします。

/app/webroot/css/memmber.css

最後に、admin の場合と、member の場合で、自動でレイアウトが切り替わるように設定します。

まず、前回 member_controller.php に入れた、

    function beforeFilter() {
        $this->layout = 'admin';
    }
を削除しておきます。

そして、/app 直下に app_controller.php を配置します。

cd Sites/cake
cp cake/libs/controller/app_controller.php app/

今コピーした、/app/app_controller.php に以下を追加します。

<?php
/**
 * Application level Controller
 *
 * This file is application-wide controller file. You can put all
 * application-wide controller-related methods here.
 *
 * 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.controller
 * @since         CakePHP(tm) v 0.2.9
 * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
 */

/**
 * This is a placeholder class.
 * Create the same file in app/app_controller.php
 *
 * Add your application-wide methods in the class below, your controllers
 * will inherit them.
 *
 * @package       cake
 * @subpackage    cake.cake.libs.controller
 * @link http://book.cakephp.org/view/957/The-App-Controller
 */
class AppController extends Controller {

    function beforeFilter(){
        if (!empty($this->params['admin'])) {
            $this->layout = "admin";
        }else{
            $this->layout = "member";
        }
    }

}

これで admin の時と admin でない時でレイアウトが切り替わります。