CodeIgniter Layout 的做法

由於在開發網站過程中, 通常都有個 template 或稱作 layout, layout 包含了整個網站的外觀, 而網站的 layout 通常會切分為 header, content, footer 甚至還有 menu。 而這當中的 content view 則是會隨著不同頁面、功能而變動, 而 layout 則為固定, 這樣可以維持同一個網站界面的一致性, 然而 CodeIgniter 並沒有對這種所謂 partial view 有較好的處理方式。

所以通常都會是像下面這樣的寫法。 載入 foo 這個 content view 到變數之後, 丟到 template view, 最後在 render 出來。

$data['foo'] = $foo;<br></br>
$view['heading'] = 'heading text';<br></br>
$view['content'] = $this->load->view('foo', $data, true);<br></br>
$this->load->view('template', $view);```

所以每個頁面就都得寫上兩行 load view 的動作, 寫久了便覺得繁瑣, 其實這個動作透過下面這個 Layout library 是可以簡化的。 這個 library 是在 [CodeIgniter wiki](http://codeigniter.com/wiki/layout_library/) 上看來的, 只修改了幾個變數。
obj =& get_instance(); $this->layout = $layout; } function setLayout($layout) { $this->layout = $layout; } function view($view, $data=null, $return = false) { $data['content'] = $this->obj->load->view($view, $data, true); if($return) { $output = $this->obj->load->view($this->layout, $data, true); return $output; } else { $this->obj->load->view($this->layout, $data, false); } } } ?>``` 有了這個 Layout library 之後變可以將載入 view 的程式簡化如下:
$data['foo'] = $foo;<br></br>
$data['heading'] = 'heading text';<br></br>
$this->layout->view('foo', $data);```

基本上以這個 library 為範例的話, 預設的 template 檔案就要命名為 template.php, 你也可以修改這個 library 的程式碼來符合你現在 template 的檔案名稱, 不過我是覺得就叫 template 還滿直覺的。  
 而 template.php 裡面則是需要放入 $content 這個變數來存放 foo.php 這個 view。 簡單的 template.php 的範例如下:








當然這個 template 可以像文章一開始講到的, 另外做更細的切分, 我們可以另外開一個 template 的目錄, 裡面存放 header.php, footer.php, 然後在 template.php 裡面載入, template.php 如下:
$this->load->view('template/header');

$this->load->view('template/footer');```

hmm… 這篇應該要有寫過 view in view 的人才看得懂吧? 超懶畫圖 XD

tzangms

Read more posts by this author.

Subscribe to Oceanic / 海海人生

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!