簡易 CodeIgniter Layout Library for Template

在 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