CodeIgnitor: View

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

View là một trang web hay một phần của trang web như header, footer, sidebar... Bạn hiểu đơn giản, view chỉ là những file HTML định hình trang web (phần lớn đều có chèn code PHP để lấy dữ liệu động). Thông thường, toàn bộ những gì bạn thấy trên trình duyệt thì đó được xem như là 1 view.

Về cơ bản, view không thể được gọi trực tiếp mà nó luôn được gọi thông qua một controller theo đúng mô hình MVC nổi tiếng.

Tạo view

Bạn tạo một tập tin (chẳng hạn tên là blogview.php) trong thư mục application/views như sau:

<html>
<head>
<title>My Blog</title>
</head>
<body>
    Welcome to my Blog!
</body>
</html>

Gọi view từ controller

Để gọi view, bạn sử dụng cú pháp sau:

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

Với view_name là tên file view bạn muốn load nhưng không kèm theo phần mở rộng (.php). Như vậy, với file blogview.php đã tạo ở trên chúng ta sẽ có cú pháp gọi file blogview.php như sau:

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

Bạn tạo một controller blog với nội dung lệnh như sau:

<?php
class Blog extends CI_Controller {
  public function index(){
    $this->load->view('blogview');
  }
}

Khi bạn truy cập URL sau:

example.com/index.php/blog

Kết quả sẽ là:

Welcome to my Blog!

Tải nhiều view

Bạn cũng có thể load nhiều view trong 1 controller như ví dụ sau:

<?php
class Page extends CI_Controller {
  public function index(){
    $data['page_title'] = 'Your title';
    $this->load->view('header');
    $this->load->view('menu');
    $this->load->view('content', $data);
    $this->load->view('footer');
  }
}
?>

Lưu trữ view trong thư mục con

Trường hợp bạn tạo view bên trong một thư mục con của thư mục application/views (ví dụ tôi đặt file blogview.php trong thư mục application/views/subfolder) bạn có thể sử dụng cú pháp lệnh sau để gọi view:

$this->load->view('subfolder/blogview');

Truyền dữ liệu từ controller ra view

Toàn bộ quá trình xử lý tương tác dữ liệu đều được thực hiện ở controller (trừ việc lấy dữ liệu từ database là thực hiện ở model sẽ nói sau) nên kết quả trả về sẽ nằm trong controller. Vậy làm cách nào để truyền dữ liệu này ra ngoài view để ta có thể trình bày theo ý muốn? Với CI thì công việc này rất đơn giản: Bạn chỉ việc gán toàn bộ các dữ liệu muốn truyền ra view vào 1 mảng và truyền vào tham số thứ 2 của phương thức load view như ví dụ dưới đây:

$data = array(
               'title' => 'HTML5',
               'heading' => 'Giới thiệu HTML5',
               'message' => 'Thông báo'
          );

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

Với ví dụ trên, khi ra ngoài blogview bạn sẽ có ngay các biến là $title, $heading $message (tương ứng với tên chỉ số của phần tử mảng) để sử dụng.

Chúng ta xét ví dụ hoàn chỉnh sau:

Tạo controller blog (application/controllers/blog.php) với nội dung sau:

<?php
class Blog extends CI_Controller {
    function __construct()
    {
        parent::__construct();
    }

    function index()
    {
        $data = array(
               'title' => 'HTML5',
               'heading' => 'Giới thiệu HTML5',
               'message' => 'Thông báo'
        );
       
        //Load view
        $this->load->view('blogview', $data);
    }
}
?>

Tạo view blogview (application/views/blogview.php) với nội dung sau:

<html>
<head>
<title><?php echo $title; ?></title>
</head>
<body>
    <h1><?php echo $heading; ?></h1>
    <?php echo $messagge; ?>
</body>
</html>

Bạn truy cập URL:

example.com/blog

Chúng ta sẽ có kết quả:

Giới thiệu HTML5

Thông báo

(Lưu ý: Chuỗi "HTML5" thì xut hin trên thanh tiêu đ ca trình duyt).

Khi dữ liệu được truyền từ controller ra view sẽ vẫn gi nguyên kiu d liu. Ví dụ kiểu dự trong controller là chuỗi (string) thì ngoài view cũng sẽ là chuỗi. Tương tự, kiểu mảng (array), kiểu đối tượng (object),... khi truyền ra view vn gi nguyên kiu d liu.

Tạo vòng lặp

Mảng dữ liệu truyền tới view không chỉ giới hạn ở các biến đơn. Ta có thể truyền nhiều mảng động để từ đó có thể tiến hành lặp để tạo nhiều hàng. Ví dụ, nếu bạn lấy dữ liệu từ database thì dữ liệu sẽ có dạng là một mảng đa chiều.

Dưới đây là một ví dụ minh họa.

Bạn đưa đoạn code sau vào controller:

<?php
class Blog extends CI_Controller {

  public function index(){
    $data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands');
    $data['title'] = "My Real Title";
    $data['heading'] = "My Real Heading";

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

}

Bạn mở view để tạo một vòng lặp:

<html>
<head>
        <title><?php echo $title;?></title>
</head>
<body>
        <h1><?php echo $heading;?></h1>

        <h3>My Todo List</h3>

        <ul>
        <?php foreach ($todo_list as $item):?>

                <li><?php echo $item;?></li>

        <?php endforeach;?>
        </ul>

</body>
</html>
Lưu ý
Ví dụ trên sử dụng cú pháp thay thế của PHP. Nếu bạn chưa rõ về cú pháp thay thế này bạn có thể xem tại ĐÂY.

Trả về view dưới dạng dữ liệu

Trong lời gọi view từ controller có tham số tùy chọn thứ ba, tham số này giúp ta thay đổi hành vi của phương thức theo đó phương thức sẽ trả về dữ liệu dưới dạng chuỗi chứ không phải là gửi nó tới trình duyệt. Điều này có thể có ích nếu ta muốn xử lý dữ liệu theo một hướng nào đó. Nếu bạn đặt tham số thứ ba này là TRUE (boolean) thì việc gọi view sẽ tương ứng với việc trả về dữ liệu. Mặc định thì phương thức sẽ trả về FALSE và thông tin sẽ được gửi tới trình duyệt. Bạn cần gán giá trị trả về cho một biến nếu bạn muốn sử dụng dữ liệu trả về đó. Cú pháp cụ thể như sau:

$string = $this->load->view('myfile', '', TRUE);
» Tiếp: Model
« Trước: Tên riêng
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!