接上一篇繼續說Yii框架下的 shop系統開發.....
一、解決問題
1.所有的 XxxxController 都繼承了 Controller 類, 但是在頁面中爲什麼沒有include 或者 require 引入 Controller.php 這個文件?這個文件是在哪引入的?
打開程序主配置文件 /shop/protected/config/main.php 查看代碼
// autoloading model and component classes 'import'=>array( 'application.models.*', 'application.components.*', ),
是這個地方引入了 /shop/protected/components目錄 下的 Controller.php 還有models 下的所有文件
再看下主配置文件是在哪引入的 ... 查看入口文件代碼 /shop/index.php
$config=dirname(__FILE__).'/protected/config/main.php';
在 入口處有調用 main.php 主配置文件.... [ 控制器 -> 父類控制器 -> components -> main.php -> index.php ]
二、Yii 佈局的實現
目前程序裏的幾個模板文件都是獨立的,如果以後需要修改頭部或者腳部代碼,那就要做重複的工作,寫重複的代碼,所以用 “佈局” 把模板中相通的部分提取出來...對代碼進行優化,把相同的頭部,腳部變成一份,大大減輕開發和維護的工作量...
1.佈局文件路徑: /shop/protected/views/layouts/
在該路徑下新建佈局文件 shop.php , 編寫代碼
<div>--我是頭部--</div>
<!-- 展示首頁、登錄、註冊等代碼信息 -->
<!-- $content 代表提取出來的首頁、登錄、註冊等頁面信息,沒有頭部和腳部 -->
<?php echo $content; ?>
<div>--我是腳部--</div>
現在配置使用該佈局,系統默認的佈局文件是 column1.php 文件
到父類控制器 Controller.php 文件中修改系統默認佈局文件...... 指定使用 shop.php
//public $layout='//layouts/column1';
public $layout='//layouts/shop';
問題:佈局文件具體與什麼有關係?
在控制器中的action方法中渲染視圖時, renderPartial() 這個方法不會渲染布局 .... render() 這個方法渲染布局
在UserController 中的actionRegister 方法中修改調用 render() 方法渲染布局
21 //註冊
22 function actionRegister(){
23
24 // renderPartial() 方法不渲染布局 render()方法渲染布局
25 //$this->renderPartial('register');
26 $this->render('register');
27 }
刷新訪問 http://***.***.**.**:****/shop/index.php?r=user/register ok,在頂端顯示 --我是頭部-- 在低端顯示 --我是腳部--
2. 把公共的部分提取出來,放到 shop.php 中對應的地方,去掉模板文件中公用的代碼
ok, 處理完畢,詳細過程就不寫出來了.....都是苦力活....
3. 寫一下佈局使用流程
在 /shop/protected/views/layouts/ 目錄下寫佈局文件 . $content 代表普遍模板內容
在 父類控制器 /shop/protected/components/Controller.php 中修改默認使用佈局文件 $layout="//layouts/shop"
在控制器的action方法中 使用 render方法渲染布局