我們先了解一下yii的layout運作流程
1. 我們建的Controller都會在一開始繼承一個叫Controller的Class
class IndexController extends Controller
{
....
}
2. 這個Controller的Class在哪裡呢? 原來就在components (組件)裡, 路徑如下:
components/Controller.php
裡面結構很簡單
class Controller extends CController
{
public $layout='//layouts/column1'; //這是yii預設的layout
public $menu=array();
public $breadcrumbs=array();
}
3. //layouts/column1在哪裡呢? 在views/layouts/column1.php
結構如下:
<?php $this->beginContent('//layouts/main'); ?>
<div id="content">
<?php echo $content; ?>
</div><!-- content -->
<?php $this->endContent(); ?>
4. 同理//layouts/main的路徑就在views/layouts/main.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" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="language" content="en" />
<!-- blueprint CSS framework -->
<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/screen.css" media="screen, projection" />
<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/print.css" media="print" />
<!--[if lt IE 8]>
<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/ie.css" media="screen, projection" />
<![endif]-->
<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/main.css" />
<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/form.css" />
<title><?php echo CHtml::encode($this->pageTitle); ?></title>
</head>
<body>
<div class="container" id="page">
<div id="header">
<div id="logo"><?php echo CHtml::encode(Yii::app()->name); ?></div>
</div><!-- header -->
<div id="mainmenu">
<?php $this->widget('zii.widgets.CMenu',array(
'items'=>array(
array('label'=>'Home', 'url'=>array('/site/index')),
array('label'=>'About', 'url'=>array('/site/page', 'view'=>'about')),
array('label'=>'Contact', 'url'=>array('/site/contact')),
array('label'=>'Login', 'url'=>array('/site/login'), 'visible'=>Yii::app()->user->isGuest),
array('label'=>'Logout ('.Yii::app()->user->name.')', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest)
),
)); ?>
</div><!-- mainmenu -->
<?php if(isset($this->breadcrumbs)):?>
<?php $this->widget('zii.widgets.CBreadcrumbs', array(
'links'=>$this->breadcrumbs,
)); ?><!-- breadcrumbs -->
<?php endif?>
<?php echo $content; ?>
<div class="clear"></div>
<div id="footer">
Copyright © <?php echo date('Y'); ?> by My Company.<br/>
All Rights Reserved.<br/>
<?php echo Yii::powered(); ?>
</div><!-- footer -->
</div><!-- page -->
</body>
</html>
好, 重點來了! $content就是你render指定的view內容
所以有感覺了嗎?
也就是除了$content以外的hmtl在畫面上就是固定的!!
這樣我們就可以任意調整我們的布局了! (ex: 左側選單固定、上方選單固定...etc)
那我們該如何使用自己寫的layout呢? 很簡單!
1. 把你的layout丟到layouts資料夾裡
2. 進到你的controller (不管是在controllers還是modules都可以), 加入下面的code
public $layout='//layouts/你的layout檔名';
ps: 檔名就好, 不用加副檔名
3. 結束!
那如果是module的話呢?
1. 把你的layout丟到你module的view裡 (ex: modules/user/view/layouts/)
2. 進到你module的controller, 加入這句
public $layout='//modules/user/view/layouts/你的layout檔名';
3. 大功告成!
沒有留言:
張貼留言