Qua loạt bài trước về CakePHP Framework, hẳn lúc này các bạn đã có góc 
nhìn tương đối về nguyên tắc làm việc của CakePHP. Nhất là chúng ta đã tìm 
hiểu về cách thức hoạt động đối với cơ sở dữ liệu trong CakePHP. Ở bài 
này, chúng ta tiếp tục tìm hiểu về kỹ thuật phân trang của CakePHP để hoàn 
thiện ứng dụng một cách đầy đủ hơn.
              
                                            
                                
            
 
            
                 9 trang
9 trang | 
Chia sẻ: luyenbuizn | Lượt xem: 1659 | Lượt tải: 0 
              
            Nội dung tài liệu CakePHP Framework: Tìm hiểu kỹ thuật phân trang, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
CakePHP Framework: Tìm hiểu kỹ thuật phân trang 
Qua loạt bài trước về CakePHP Framework, hẳn lúc này các bạn đã có góc 
nhìn tương đối về nguyên tắc làm việc của CakePHP. Nhất là chúng ta đã tìm 
hiểu về cách thức hoạt động đối với cơ sở dữ liệu trong CakePHP. Ở bài 
này, chúng ta tiếp tục tìm hiểu về kỹ thuật phân trang của CakePHP để hoàn 
thiện ứng dụng một cách đầy đủ hơn. 
Để dễ dàng cho việc tương tác với cơ sở dữ liệu (CSDL). Trước tiên chúng ta 
cần cấu hình theo đường dẫn app/config/database.php thông tin kết nối vào 
hệ thống. (Xem lại bài CakePHP Framework cho người mới bắt đầu). 
Sau khi đã kết nối vào hệ thống, tiếp đến ta tiến hành thực hiện các câu truy 
vấn sau để tiến hành tạo bảng dữ liệu mẫu, để phục vụ cho những đoạn code 
test bên dưới. 
01 CREATE TABLE `books` ( 
02 `id` int(11) NOT NULL AUTO_INCREMENT, 
03 
 `isbn` varchar(13) NOT 
NULL, 
04 `title` varchar(64) NOT NULL, 
05 `description` text NOT NULL, 
06 PRIMARY KEY (`id`) 
07 ) 
08 
09 
INSERT INTO `books` VALUES ('1', 'abcxyz', 'Kĩ thuật lập trình', 'Kĩ 
thuật lập trình'); 
10 
INSERT INTO `books` VALUES ('2', 'c,c++', 'Lập trình C', 'Lap trinh C 
can ban'); 
11 
INSERT INTO `books` VALUES ('3', 'C++', 'Cấu trúc dữ liệu và giả 
thuật', 'Cau truc du lieu va giai thuat'); 
12 
INSERT INTO `books` VALUES ('4', 'php', 'PHP căn bản', 'php, lap trinh 
php'); 
13 
INSERT INTO `books` VALUES ('5', 'php nc', 'PHP Nâng cao', 'php,php 
nang cao'); 
14 
INSERT INTO `books` VALUES ('6', 'php fw', 'PHP Framework', 'php, 
php framework'); 
15 INSERT INTO `books` VALUES ('22', 'abc', 'Lập trình ứng dụng web tập 
I', 'Lập trình ứng dụng web tập I'); 
16 
INSERT INTO `books` VALUES ('24', 'abc', 'Lập trình ứng dụng web tập 
II', 'abc'); 
17 
INSERT INTO `books` VALUES ('26', 'abc', 'Lập trình web với 
CakePHP', 'abc'); 
18 
INSERT INTO `books` VALUES ('27', 'acb', 'Lập trình web với 
CodeIgniter', 'abc'); 
19 
INSERT INTO `books` VALUES ('28', 'abc', 'Tutorial covered by Thái 
Thanh Phong ^0^', 'abc'); 
Tiếp tục, ta tạo Controller Books 
(app/controllers/books/books_controller.php) 
01 <?php 
02 class BooksController extends AppController{ 
03 var $name = "Books";// ten cua Controller Book 
04 var $helpers = array('Paginator','Html'); 
05 var $components = array('Session'); 
06 var $paginate = array(); 
07 
08 //------- Paging Normal 
09 function paging(){ 
10 $this->paginate = array( 
11 'limit' => 4, 
12 'order' => array('title' => 'desc'), 
13 ); 
14 $data = $this->paginate("Book"); 
15 $this->set("data",$data); 
16 } 
- Để sử dụng chức năng phân trang của cakePHP thì trong Controller cần có 
thành phần helper Paginator : 
1 var $helpers = array('Paginator','Html'); 
và namespace paginate : 
1 var $paginate = array(); 
- Ở đây tôi lấy tất dữ liệu bắt đầu với 4 record đầu tiên vào theo thứ tự giảm 
dần theo “title”. 
1 $this->paginate = array( 
2 'limit' => 4, 
3 'order' => array('title' => 'desc'), 
4 ); 
- Nếu chỉ lấy những 1 số field cần thiết : 
1 $this->paginate = array( 
2 ‘field’ =>array(“title”,”info”), 
3 'limit' => 4, 
4 'order' => array('title' => 'desc'), 
5 ); 
- Để lấy dữ liệu theo cấu hình của biến namespace paginate ta dùng hàm 
$this->paginate(‘ten_model'), trong ví dụ này model của tôi có tên là Book. 
1 $data = $this->paginate("Book"); 
- Việc cấu hình biến namspace paginate dùng hàm $this-
>paginate(‘ten_model') 
Giống như việc cấu hình điều kiện truy xuất dữ liệu và lấy dữ liệu bằng 
hàm$this->find(‘…');.(Xem lại hàm truy vấn CSDL) 
- Chúng ta chỉ cần cấu hình như vậy là có thể phân trang cho CSDL , mặc 
định cakePHP dùng biến page để xác định trang hiện tại. 
Tiếp tục, ta tạo model Book (app/models/book.php) 
1 <?php 
2 class Book extends AppModel{ 
3 var $name = "Book"; // Ten cua Model Book 
4 } 
Sau đó, ta tạo tiếp view(phần hiển thị) cho việc phân trang 
(app/views/books/paging.ctp) 
01 
02 
03 <?php 
04 
 echo $this->Paginator->prev('« Previous ', null, null, array('class' => 
'disabled')); //Shows the next and previous links 
05 echo " | ".$this->Paginator->numbers()." | "; //Shows the page numbers 
06 
 echo $this->Paginator->next(' Next »', null, null, array('class' => 
'disabled')); //Shows the next and previous links 
07 
 echo " Page ".$this->Paginator->counter(); // prints X of Y, where X is 
current page and Y is number of pages 
08 ?> 
09 
10 <?php 
11 if($data==NULL){ 
12 echo "Dada Empty"; 
13 } 
14 else{ 
15 echo " 
16 
17 id 
18 Title 
19 "; 
20 foreach($data as $item){ 
21 echo ""; 
22 echo "".$item['Book']['id'].""; 
23 
 echo "<a href='".$this-
>webroot."books/view/".$item['Book']['id']."' 
>".$item['Book']['title'].""; 
24 echo ""; 
25 } 
26 } 
27 ?> 
28 
29 
Cuối cùng, ta chạy với đường dẫn sau để xem kết quả: 
            Các file đính kèm theo tài liệu này:
 cakephp_framewor3_7688.pdf cakephp_framewor3_7688.pdf