Hướng dẫn CodeIgniter – Như đã mô tả ở trên lợi thế của việc tạo Master Layout sẽ giúp chúng ta không phải viết lại Header và Footer quá nhiều lần. Trong view bạn chỉ việc viết cho phần Content mà thôi.
#1 Tạo file Layout
Trong View \application\views\ tạo Folder có tên Layout
\application\views\Layout
Tạo 1 file _MainLayout.php với nội dung
<html> <head> <title><?=$title_for_layout?></title> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <link rel="stylesheet" href="/css/main.css" type="text/css" /> </head> <body> <div id="pagewidth" > <div id="header" ><img src="/images/header.jpg" width="700" height="200"></div> <div id="wrapper" class="clearfix" > <div id="twocols" class="clearfix"> <?=$content_for_layout?> </div> </div> <div id="footer" > Footer </div> </div> </body> </html>
Đoạn code trên có gì đặc biệt?
Đó chính là dòng: <?=$content_for_layout?> nội dung của view sẽ được fill vào đây.
#2 Tạo Library để sử dụng Layout
Trong folder \application\libraries tạo 1 file có tên Layout.php. Cái này chính là class thư viện Layout mà sau này chúng ta sẽ dùng.
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Layout { var $obj; var $layout; function Layout($layout = "Layout/_MainLayout") { $this->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); } } }
Các bạn đọc hiểu chứ?? :D. Nếu không hiểu thì comment nha. Mình định giải thích mà thôi cứ để các bạn đọc hiểu sẽ nhớ lâu hơn
#3: Register Library
Library là gì? Mục đích của việc register library là gì?
TL: Kiểu dạng như 1 hàm common viết 1 lần và dùng ở nhiều nơi vậy đó. 🙂
Có bao nhiêu cách để Register Library?
TL: Có 2 cách
+ Register ở Controller (Chỉ sử dụng được ơ Controller register)
$this->load->library('layout');
+ Register ở AutoLoad (Sử dụng được cho toàn Application)
Mở file \application\config\autoload.php lên
Tìm đến dòng
$autoload['libraries'] = array('');
Sửa thành
$autoload['libraries'] = array('layout');
Layout chính là tên Library của bạn vừa tạo
#4 Sử dụng Library Master Layout
Trong controller
function index() { $data['variable1'] = 'first var'; $this->layout->view("/Home/index",$data); }
Chạy thử chương trình và xem kết quả 🙂