CodeIgniter 使用手冊版本 2.2.0


Views

檢視(view) 可以是網頁、頁面的片斷像是 header,footer,sidebar 之類的。事實上,如果你需要這樣的階層架構的話,檢視(views)還可以固定的嵌入在其他的 view 裡頭。

檢視(Views)無法直接被呼叫,它必須被控制器(controller)所呼叫。還記得在 MVC framework 裡頭,控制器(Controller)扮演的是交通警察的角色,所以它是負責取得一部分的 view。如果你還沒讀到控制器(Controllers) 的章節的話,你應該在繼續下去之前,先把那章節讀完。

使用你在 控制器(controller) 章節中,所建立的範例控制器。然後替它加入 view。

新增 View

用你的文字編輯器,新增一個 blogview.php 的檔案,然後把下列程式碼塞進去:

然後存到 application/views/ 目錄底下。

載入 View

載入部份的檢視檔(view file),你會使用到底下的函數:

$this->load->view('name');

name 的部份表示是你的檢視檔(view file)的名字。注意: 其中副檔名不必 .php 加進去,除非你建立不使用副檔名為 .php 的檔案。

現在開啟更早之前你建立的控制器 blog.php 的檔案,然後用載入 view 函數(view loading function)來取代回應的敘述(echo statement):

這時用之前你建立的 URL,你應該可以看到新的 view 了。那個 URL 應該像底下這樣:

example.com/index.php/blog/

載入多個 Views

CodeIgniter 會聰明地處理在控制器中,像 $this->load->view 這樣多個 view 的呼叫。如有超過一個以上的呼叫的話,他們會附加在一起。舉例來說,你也許會希望有一個 header view、menu view、content view、footer view。依你的需求的程式碼,看起來像底下這樣:

<?php

class Page extends Controller {

   function index()
   {
      $data['page_title'] = 'Your title';
      $this->load->view('header');
      $this->load->view('menu');
      $this->load->view('content', $data);
      $this->load->view('footer');
   }

}
?>

"動態新增資料" 的方式,你可以在底下看到範例。

把 view 收納進子目錄裡頭

假如你喜歡這樣的組織方式的話,你也可以把檢視檔(view file)分散儲存到子目錄之中。當這麼做的話,你需要把這個目錄的名稱 include 進來到 view 裡頭。參考範例:

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

新增動態資料到 View

由控制器(controller)傳送給檢視(view)的資料,可以在載入 view 函數(view loading function)的第二個參數,藉由使用 array 或是 object 的方式來傳遞。這裡有個使用 array 的範例:

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

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

這裡有個使用 object 的範例:

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

注意: 如果你使用 object 的話,類別變數(class variables)會轉成 array elements。

讓我們來加到你的控制器裡頭試試看,開啟檔案,然後塞進底下的程式碼:

現在打開檢視檔(view file),然後把原本的文字改成跟你的資料相關的陣列鍵值(array keys)名稱(如下所示):

然後載入你已經使用的 URL 該頁,應該可看到變數已經換過了。

新增迴圈(Creating Loops)

送給檢視檔(view file)的資料陣列不限為單變數。可以送出多維陣列,用來重複產生多欄資料。 舉例來說,你從資料庫將資料拉出來,它基本上是多維度陣列的型式。

這裡舉了簡單的例子。新增至你的控制器(controller)裡頭:

開啟檢視檔(view file),新增迴圈:

注意: 你會發現上例中,我們使用的是變換 PHP 句法的方式。若你不熟悉那種句法的話,可以參考 這裡

Returning views as data

其中第三個 選擇性 參數,可以讓你改變函數的行為,你可以由函數直接輸出給瀏覽器改成回傳字串資料給你。這對你要以某些方式來處理資料時還蠻好用的。譬如你可以把參數設定成true 布林值(boolean),他就會傳回資料。預設的函數行為是 false,為送至你的瀏覽器。記得你若要資料回傳的話,記得給予它正確的變數值:

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