鍍金池/ 教程/ PHP/ 視圖
模型
歡迎來到 CodeIgniter
通過 CLI 執(zhí)行 CodeIgniter
自動載入資源
初探 CodeIgniter
創(chuàng)建核心系統(tǒng)類
應用程序流程圖
安裝指南
CodeIgniter 特性
應用性能分析
web 頁面緩存
公共函數(shù)
安全
處理多環(huán)境
使用 CodeIgniter 庫
管理你的應用程序
創(chuàng)建輔助類
兼容性函數(shù)
開始 CodeIgniter
視圖
視圖文件的 PHP 替代語法
結束語
靜態(tài)頁面
URI 路由
錯誤處理
版本升級
創(chuàng)建新聞
CodeIgniter URL
讀取新聞
鉤子 - 擴展系統(tǒng)核心
設計和架構目標
保留字
疑難解答
下載 CodeIgniter
模式-視圖-控制
輔助函數(shù)
控制器
創(chuàng)建適配器
PHP 開發(fā)規(guī)范

視圖

視圖是一個簡單的 Web 頁面,或者頁面的部分,如頁頭,頁尾,側邊欄等等。實際上,如果你需要這種樹狀類型,視圖可以靈活的嵌入到其他視圖(或者再嵌入其他視圖)。

視圖從不會被直接調用,必須通過控制器來調用。記住,在 MVC 架構中,控制器扮演了交通警察的角色,那么它就得負責取回一個特殊視圖。如果你沒有閱讀過控制器文檔,那么你需要先閱讀一下。

使用之前創(chuàng)建的控制頁面,并加入一個視圖。

創(chuàng)建一個視圖

使用你的文本編輯器,創(chuàng)建一個 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 就是你的視圖文件。

注意: .php 后綴名不用特別指定,除非你使用了非 .php 的文件。

現(xiàn)在,打開之前你創(chuàng)建的 Blog.php,使用視圖加載方法覆蓋 echo 語句。

<?php
class Blog extends CI_Controller {

    public function index()
    {
        $this->load->view('blogview');
    }
}

如果你使用之前的 URL 瀏覽網站,你將會看到你的新視圖,URL 與下面類似:

example.com/index.php/blog/

載入多個視圖

CodeIgniter 將會智能的處理多個從控制器發(fā)起的 $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');
    }

}

上述的列子中,我們使用動態(tài)添加數(shù)據(jù)方法,稍后你將會看到。

用子文件夾保存視圖

如果你想讓文件系統(tǒng)更有組織性,可以使用子文件夾來保存視圖。當你載入視圖的時候,必須帶有子文件夾名。

$this->load->view('directory_name/file_name');

添加動態(tài)數(shù)據(jù)到視圖

控制器將數(shù)組或者對象作為第二個參數(shù)傳遞給視圖加載方法。底下是使用數(shù)組的例子:

$data = array(
    'title' => 'My Title',
    'heading' => 'My Heading',
    'message' => 'My Message'
);

$this->load->view('blogview', $data);

這個是使用對象作為參數(shù):

$data = new Someclass();
$this->load->view('blogview', $data);

注意:如果你使用一個對象,類變量將會變?yōu)閿?shù)組元素。

讓我們使用控制器文件試試,打開它并添加以下代碼:

<?php
class Blog extends CI_Controller {

    public function index()
    {
        $data['title'] = "My Real Title";
        $data['heading'] = "My Real Heading";

        $this->load->view('blogview', $data);
    }
}

現(xiàn)在打開你的視圖文件,將文本改為和數(shù)組 key 對應的變量:

<html>
<head>
    <title><?php echo $title;?></title>
</head>
<body>
    <h1><?php echo $heading;?></h1>
</body>
</html>

接著使用之前的 URL 加載頁面,你將看到變量已經替換。

創(chuàng)建循環(huán)

你傳給視圖的變量,不僅是一個簡單變量。你也可以傳遞多維數(shù)組,他可以循環(huán)生成多行。例如,如果你從你的數(shù)據(jù)庫里獲取數(shù)據(jù),它既是典型的多維數(shù)組。

這里有一個簡單的例子,添加到你的控制器:

<?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);
    }
}

現(xiàn)在打開你的視圖文件,并創(chuàng)建循環(huán):

<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>

注意:你也許已經注意到了,上面的例子我們使用了 PHP 的替代語法。如果你不熟悉可以閱讀 alternative_php文檔.

返回視圖

view 函數(shù)第三個可選參數(shù)可以改變函數(shù)的行為,讓數(shù)據(jù)作為字符串返回而不是發(fā)送到瀏覽器。如果你想用其他方法處理數(shù)據(jù),這會很有用。如果你將參數(shù)設置為 TRUE (boolean),它將會返回數(shù)據(jù)。默認為 false,這樣會發(fā)送給瀏覽器。如果你想要返回數(shù)據(jù),記得將他賦值給變量。

$string = $this->load->view('myfile', '', TRUE);