# 視圖
簡單來說,一個視圖其實就是一個 Web 頁面,或者頁面的一部分,像頁頭、頁腳、側邊欄等。 實際上,視圖可以很靈活的嵌在另一個視圖里,然后這個視圖再嵌在另一個視圖里,等等, 如果你想使用這種層次結構的話,可以這樣做。
視圖不是直接被調用的,它必須通過?[控制器](http://codeigniter.org.cn/user_guide/general/controllers.html)?來加載。在 MVC 框架里, 控制器扮演著類似于交警的角色,它專門負責讀取特定的視圖。如果你還沒有讀過?[控制器](http://codeigniter.org.cn/user_guide/general/controllers.html)?頁面,你應該先看下這個。
使用在?[控制器](http://codeigniter.org.cn/user_guide/general/controllers.html)?頁面中創建的控制器例子,讓我們再添加一個視圖。
## 創建視圖
使用你的文本編輯器,創建一個 blogview.php 文件,代碼如下:
~~~
<html>
<head>
<title>My Blog</title>
</head>
<body>
<h1>Welcome to my Blog!</h1>
</body>
</html>
~~~
然后保存到你的?application/views/?目錄下。
## 加載視圖
使用下面的方法來加載指定的視圖:
~~~
$this->load->view('name');
~~~
name 參數為你的視圖文件名。
>[info] 注解
> 文件的擴展名 .php 可以省略,除非你使用了其他的擴展名。
現在,打開你之前創建的控制器文件 Blog.php ,然后將 echo 語句替換成 加載視圖的代碼:
~~~
<?php
class Blog extends CI_Controller {
public function index()
{
$this->load->view('blogview');
}
}
~~~
跟之前一樣,通過類似于下面的 URL 來訪問你的網站,你將看到新的頁面:
~~~
example.com/index.php/blog/
~~~
## 加載多個視圖
CodeIgniter 可以智能的處理在控制器中多次調用?$this->load->view()?方法。 如果出現了多次調用,視圖會被合并到一起。例如,你可能希望有一個頁頭視圖、 一個菜單視圖,一個內容視圖 以及 一個頁腳視圖。代碼看起來應該這樣:
~~~
<?php
class Page extends CI_Controller {
public function index()
{
$data['page_title'] = 'Your title';
$this->load->view('header');
$this->load->view('menu');
$this->load->view('content', $data);
$this->load->view('footer');
}
}
~~~
在上面的例子中,我們使用了 "添加動態數據" ,我們會在后面講到。
## 在子目錄中存儲視圖
如果你喜歡的話,你的視圖文件可以放到子目錄下組織存儲,當你這樣做, 加載視圖時需要包含子目錄的名字,例如:
~~~
$this->load->view('directory_name/file_name');
~~~
## 向視圖添加動態數據
通過視圖加載方法的第二個參數可以從控制器中動態的向視圖傳入數據, 這個參數可以是一個?**數組**?或者一個?**對象**?。這里是使用數組的例子:
~~~
$data = array(
'title' => 'My Title',
'heading' => 'My Heading',
'message' => 'My Message'
);
$this->load->view('blogview', $data);
~~~
這里是使用對象的例子:
~~~
$data = new Someclass();
$this->load->view('blogview', $data);
~~~
>[info] 注解
> 當你使用對象時,對象中的變量會轉換為數組元素。
讓我們在你的控制器文件中嘗試一下,添加如下代碼:
~~~
<?php
class Blog extends CI_Controller {
public function index()
{
$data['title'] = "My Real Title";
$data['heading'] = "My Real Heading";
$this->load->view('blogview', $data);
}
}
~~~
再打開你的視圖文件,將文本修改為傳入的數組對應的變量:
~~~
<html>
<head>
<title><?php echo $title;?></title>
</head>
<body>
<h1><?php echo $heading;?></h1>
</body>
</html>
~~~
然后通過剛剛的 URL 重新加載頁面,你應該可以看到變量被替換了。
## 使用循環
傳入視圖文件的數據不僅僅限制為普通的變量,你還可以傳入多維數組, 這樣你就可以在視圖中生成多行了。例如,如果你從數據庫中獲取數據, 一般情況下數據都是一個多維數組。
這里是個簡單的例子,將它添加到你的控制器中:
~~~
<?php
class Blog extends CI_Controller {
public function index()
{
$data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands');
$data['title'] = "My Real Title";
$data['heading'] = "My Real Heading";
$this->load->view('blogview', $data);
}
}
~~~
然后打開你的視圖文件,創建一個循環:
~~~
<html>
<head>
<title><?php echo $title;?></title>
</head>
<body>
<h1><?php echo $heading;?></h1>
<h3>My Todo List</h3>
<ul>
<?php foreach ($todo_list as $item):?>
<li><?php echo $item;?></li>
<?php endforeach;?>
</ul>
</body>
</html>
~~~
>[info] 注解
> 你會發現在上例中,我們使用了 PHP 的替代語法,如果你對其還不熟悉,可以閱讀?[這里](http://codeigniter.org.cn/user_guide/general/alternative_php.html)?。
## 將視圖作為數據返回
加載視圖方法有一個可選的第三個參數可以讓你修改它的默認行為,它讓視圖作為字符串返回 而不是顯示到瀏覽器中,這在你想對視圖數據做某些處理時很有用。如果你將該參數設置為 TRUE , 該方法返回字符串,默認情況下為 FALSE ,視圖將顯示到瀏覽器。如果你需要返回的數據, 記住將它賦值給一個變量:
~~~
$string = $this->load->view('myfile', '', TRUE);
~~~
- 歡迎使用 CodeIgniter
- 安裝說明
- 下載 CodeIgniter
- 安裝說明
- 從老版本升級
- 疑難解答
- CodeIgniter 概覽
- CodeIgniter 將從這里開始
- CodeIgniter 是什么?
- 支持特性
- 應用程序流程圖
- 模型-視圖-控制器
- 設計與架構目標
- 教程 - 內容提要
- 加載靜態內容
- 讀取新聞條目
- 創建新聞條目
- 結束語
- 常規主題
- CodeIgniter URL
- 控制器
- 保留名稱
- 視圖
- 模型
- 輔助函數
- 使用 CodeIgniter 類庫
- 創建類庫
- 使用 CodeIgniter 驅動器
- 創建驅動器
- 創建核心系統類
- 創建附屬類
- 鉤子 - 擴展框架核心
- 自動加載資源
- 公共函數
- 兼容性函數
- URI 路由
- 錯誤處理
- 網頁緩存
- 程序分析
- 以 CLI 方式運行
- 管理你的應用程序
- 處理多環境
- 在視圖文件中使用 PHP 替代語法
- 安全
- PHP 開發規范
- 類庫參考
- 基準測試類
- 緩存驅動器
- 日歷類
- 購物車類
- 配置類
- Email 類
- 加密類
- 加密類(新版)
- 文件上傳類
- 表單驗證類
- FTP 類
- 圖像處理類
- 輸入類
- Javascript 類
- 語言類
- 加載器類
- 遷移類
- 輸出類
- 分頁類
- 模板解析類
- 安全類
- Session 類
- HTML 表格類
- 引用通告類
- 排版類
- 單元測試類
- URI 類
- 用戶代理類
- XML-RPC 與 XML-RPC 服務器類
- Zip 編碼類
- 數據庫參考
- 數據庫快速入門: 示例代碼
- 數據庫配置
- 連接你的數據庫
- 查詢
- 生成查詢結果
- 查詢輔助函數
- 查詢構造器類
- 事務
- 數據庫元數據
- 自定義函數調用
- 數據庫緩存類
- 數據庫工廠類
- 數據庫工具類
- 數據庫驅動器參考
- 輔助函數參考
- 數組輔助函數
- 驗證碼輔助函數
- Cookie 輔助函數
- 日期輔助函數
- 目錄輔助函數
- 下載輔助函數
- 郵件輔助函數
- 文件輔助函數
- 表單輔助函數
- HTML 輔助函數
- 語言輔助函數
- Inflector 輔助函數
- 數字輔助函數
- 路徑輔助函數
- 安全輔助函數
- 表情輔助函數
- 字符串輔助函數
- 文本輔助函數
- 排版輔助函數
- URL 輔助函數
- XML 輔助函數
- 向 CodeIgniter 貢獻你的力量