Các Views không bao giờ được gọi trực tiếp, chúng
phải được tải bởi 01 controller. Hãy nhớ rằng trong 01 framework MVC, Controller đóng
vai cảnh sát giao thông , vì thế nó có nhiệm vụ nạp vào 01 view thích hợp. Bạn
cần đọc: bài 02-Controllers trước khi đọc tiếp bài này.
Tạo View
Các bạn tạo tập tin application/views/blogview.php và dán vào đoạn mã sau:
<html>
<head>
<title>Lophocvitinh.COM</title>
</head>
<body>
<h1>Lophocvitinh.COM
chào mừng bạn!</h1>
</body>
</html>
Tải View
Để tải 01 view ta sẽ dùng phương thức sau:
$this->load->view('tenview');
Ở đây tenview
chính là tên tập tin view.
Ghi chú:
Phần mở rộng .php không cần phải ghi vào trừ khi bạn dùng loại tập tin không phải là .php
Ghi chú:
Phần mở rộng .php không cần phải ghi vào trừ khi bạn dùng loại tập tin không phải là .php
Bây giờ, mở tập tin controller Blog.php mà ta đã
tạo trong bài 02-controller, và thay câu lệnh echo bằng câu lệnh tải view trong
phương thức index()
<?php
class
Blog extends CI_Controller
{
public function index()
{
$this->load->view('blogview');
}
}
Ta sẽ dùng URL để vào controller blog như vầy:
example.com/index.php/blog/
CodeIgniter có khả năng xử lý nhiều lệnh gọi $this->load->view() từ bên trong 01 controller. Nếu điều đó xảy ra các
views mới sẽ tự động chèn vào bên dưới view trước đó. Ví dụ vầy cho dễ hiểu, bạn
muốn có 01 header view, 01 menu view, 01 content view,và 01 footer view. Ta sẽ
làm điều đó như 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');
}
}
Trong ví dụ trên, chúng ta đang dùng cách “thêm dữ
liệu vào 01 cách động”, mà ta sẽ thấy dưới đây.
Các tập tin view cũng có thể lưu trong các thư mục
con nếu bạn cần tổ chức lại chúng. Khi làm như vầy bạn cần thêm vào đường dẫn
tên thư mục khi tải view. Ví dụ:
$this->load->view('tên_thư_mục/tên_tập_tin');
Dữ liệu được truyền từ controller vào view thông
qua 01 mảng hoặc 01 đối tượng trong tham số thứ 02 của
phương thức tải view. Đây là 01 ví dụ dùng mảng để truyền vào view:
$data
= array(
'title'
=> 'My Title',
'heading'
=> 'My Heading',
'message'
=> 'My Message'
);
$this->load->view('blogview',
$data);
Và đây là 01 ví dụ dùng đối tượng để truyền vào
view:
$data
= new Someclass();
$this->load->view('blogview',
$data);
Chú ý:
Nếu bạn dùng 01 đối tượng, các biến của lớp sẽ chuyển
thành phần tử mảng.
Ta hãy thử với tập tin controller Blog.php
<?php
class
Blog extends CI_Controller
{
public function index()
{
$data['title']
= "My Real Title";
$data['heading']
= "My Real Heading";
$this->load->view('blogview',
$data);
}
}
Bây giờ mở tập tin view và thay đổi các dòng văn
bản( cặp thẻ <title> và <h1>) thành các biến tương ứng với các khóa
của mảng trong biến $data
<html>
<head>
<title><?php echo
$title;?></title>
</head>
<body>
<h1><?php
echo $heading;?></h1>
</body>
</html>
Sau đó ta tải lại URL đến controller Blog và thấy
các giá trị các biến đã được thay vào.
Mảng $data bạn truyền vào tập tin view không bị
giới hạn chỉ là những biến đơn . Bạn có thể truyền mảng nhiều chiều -> phải
lặp để hiển thị giá trị trên nhiều dòng. Ví dụ nếu bạn kéo dữ liệu từ cơ sở dữ
liệu , nó thường có dạng mảng nhiều chiều.
Sau đây là 01 ví dụ giản đơn trong controller Blog
<?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ây giờ ta sẽ tạo 01 vòng lặp trong tập tin view
<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>
Chú ý:
Trong ví dụ trên chúng ta đang dùng cú pháp hoán
đổi của . Nếu muốn tìm hiểu thêm bạn có thể đọc thêm ở mục user_guide/general/alternative_php.html
Có 01 tùy chọn thứ 03 cho phép bạn thay đổi hành vi
của phương thức -> làm cho nó trả về 01 chuỗi thay vì gửi đến trình duyệt. Điều
này có thể hữu dụng nếu bạn muốn xử lý dữ liệu theo cách nào đó. Nếu bạn thiết
lập tham số là TRUE (boolean) nó sẽ
trả về dữ liệu. Giá trị mặc định là false,
nghĩa là nó sẽ gửi kết quả đến trình duyệt. Hãy nhớ gán nó vào 01 biến nếu bạn
muốn trả về dữ lieu:
$string
= $this->load->view('myfile',
'', TRUE);
+Các tập tin đã tạo và sửa trong bài viết này:
·
application/views/blogview.php
·
application/controllers/Blog.php
·
application/controllers/Page.php
Ghi chú:
Để sử dụng hình ảnh, tài liệu,css… trong view ta có 02 cách:
1.
Dùng đường dẫn trực tiếp: http://localhost/thư_mục_CI/thư_mục_tài_nguyên
2.
Dùng đường dẫn nội bộ CI cần làm 02 việc:
·
Tải thư viện trong lớp khởi tạo controller: $this->load->helper('url');
·
Dùng câu lệnh sau để dán đường dẫn thư mục gốc
CI trước thư mục tài nguyên:
<?php echo base_url();?>tên_thư_mục_tài_nguyên
XEM MỤC LỤC CÁC BÀI VIẾT CODE IGNITER
Nếu vẫn chưa rõ các bạn xem thêm video clip sau:
By #tiensim
Nguồn:
User Guide – General Topics
Không có nhận xét nào:
Đăng nhận xét