在 Web 開發網站,最重要的就是切割版面 CSS 化,制定共同部份 header 跟 footer…等,如果是用在 CodeIgniter Controller 裡面,呼叫 Views 的時候,如底下程式碼:
$data = array(
"title" => "Welcome to Test"
);
$this->load->view("header");
$this->load->view("welcome", $data);
$this->load->view("footer");大家可以發現只要任何一個 Controller 的函式都必須寫上面的程式碼,這樣是不是重複率太高了呢?在CodeIgniter Wiki 裡面發現一個不錯用的簡易 layout library,他的作法就是利用 $this->load->view 裡面的第三個參數來達成,可以參考線上文件 - Views 最後一個段落 Returning views as data,我們參考看看底下官網提供的程式碼:
obj =& get_instance();
$this->layout = $layout;
}
function setLayout($layout)
{
$this->layout = $layout;
}
function view($view, $data=null, $return=false)
{
$loadedData = array();
$loadedData['content_for_layout'] = $this->obj->load->view($view,$data,true);
if($return)
{
$output = $this->obj->load->view($this->layout, $loadedData, true);
return $output;
}
else
{
$this->obj->load->view($this->layout, $loadedData, false);
}
}
}
?> 注意裡面制定了 layout_main.php 這個 Template PHP 檔案,所以大家需要在application/views 資料夾產生此檔案,或者是可以透過程式 setLayout 函式去修改,至於我們怎麼傳變數到 Template 裡面呢,作者的作法是建立一個 config 檔案,裡面把不會變動的變數都寫在裡面,比如說是網站 site_name site_description site_keywords 等資料寫到 application/config/site_settings.php,接下來修改 layout library 裡面的 view function:
$loadedData = array(
"content" => $this->obj->load->view($view, $data, true),
"site_name" => $this->obj->config->item('site_name') . $title,
"site_description" => $this->obj->config->item('site_description'),
"site_keywords" => $this->obj->config->item('site_keywords'),
);
可以自己變化看看,我想應該是不難的。如果有任何問題,歡迎到See also
- 來聊聊 PHP & JavaScript & CSS 的 Coding Style
- 為什麼我選擇使用 Laravel Framework?
- Laravel 搭配 Google, Facebook, Twitter 第三方 OAuth 認證
- 將 wordpress 強制使用 SSL 連線
- PHP 7 vs HHVM Benchmark 比較
- Laravel 50 個小技巧 + Laravel 5.2 新功能
- Laravel Homestead 支援 MySQL 5.7 和 Node 5.0
- PHP-FIG 新網站
- Laravel Homestead 支援 PHP 7
- Laravel 5.1 is released