Hướng dẫn học: Phân trang dữ liệu với CakePHP

Hướng dẫn học: Phân trang dữ liệu với CakePHP

Cũng như bao framework khác như Zend, CodeIgniter … CakePHP cũng hỗ trợ các phương thức phân trang cho dữ liệu.

1.Chuẩn bị CSDL :

CREATE TABLE `books` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `isbn` varchar(13) NOT NULL,
  `title` varchar(64) NOT NULL,
  `description` text NOT NULL,
  PRIMARY KEY (`id`)
) 

INSERT INTO `books` VALUES ('1', 'abcxyz', 'Kĩ thuật lập trình', 'Kĩ thuật lập trình');
INSERT INTO `books` VALUES ('2', 'c,c++', 'Lập trình C', 'Lap trinh C can ban');
INSERT INTO `books` VALUES ('3', 'C++', 'Cấu trúc dữ liệu và giả thuật', 'Cau truc du lieu va giai thuat');
INSERT INTO `books` VALUES ('4', 'php', 'PHP căn bản', 'php, lap trinh php');
INSERT INTO `books` VALUES ('5', 'php nc', 'PHP Nâng cao', 'php,php nang cao');
INSERT INTO `books` VALUES ('6', 'php fw', 'PHP Framework', 'php, php framework');
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');
INSERT INTO `books` VALUES ('24', 'abc', 'Lập trình ứng dụng web tập II', 'abc');
INSERT INTO `books` VALUES ('26', 'abc', 'Lập trình web với CakePHP', 'abc');
INSERT INTO `books` VALUES ('27', 'acb', 'Lập trình web với CodeIgniter', 'abc');
INSERT INTO `books` VALUES ('28', 'abc', 'Tutorial covered by Thái Thanh Phong ^0^', 'abc');

Tạo Controller Books (app/controllers/books/books_controller.php):

<?php
class BooksController extends  AppController{
    var $name = "Books";// ten cua Controller Book
    var $helpers = array('Paginator','Html');
    var $components = array('Session');
    var $paginate = array();
    
    //------- Paging Normal 
    function paging(){
        $this->paginate = array(
                                'limit' => 4,
                                'order' => array('title' => 'desc'),
                             );
        $data = $this->paginate("Book");
        $this->set("data",$data);
    }

Ghi chú :

- Để 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 :

var $helpers = array('Paginator','Html'); 

và namespace paginate :

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”

$this->paginate = array(
                                'limit' => 4,
                                'order' => array('title' => 'desc'),
                             ); 

- Nếu chỉ lấy những 1 số field cần thiết :

$this->paginate = array(
‘field’ =>array(“title”,”info”),
                                'limit' => 4,
                                'order' => array('title' => 'desc'),
                             ); 

- Để 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

$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
Việc cấu hình có vẻ đơn giản hơn nhiều so với CodeIgniter phải không !

Tạo Model Book (app/models/book.php) :

<?php
class Book extends AppModel{
    var $name = "Book"; // Ten cua Model Book
}

Tạo view cho function Paging của Controller Books (app/views/books/paging.ctp):

<html>
<body>
<?php
    echo $this->Paginator->prev('« Previous ', null, null, array('class' => 'disabled')); //Shows the next and previous links
    echo " | ".$this->Paginator->numbers()." | "; //Shows the page numbers
    echo $this->Paginator->next(' Next »', null, null, array('class' => 'disabled')); //Shows the next and previous links
    echo " Page ".$this->Paginator->counter(); // prints X of Y, where X is current page and Y is number of pages
?> 

<?php
if($data==NULL){
    echo "<h2>Dada Empty</h2>";
}
else{
    echo "<table>
          <tr>
            <td>id</td>
            <td>Title</td>
          </tr>";
    foreach($data as $item){
        echo "<tr>";
        echo "<td>".$item['Book']['id']."</td>";
        echo "<td><a href='".$this->webroot."books/view/".$item['Book']['id']."' >".$item['Book']['title']."</a></td>";
        echo "</tr>";
    } 
}
?>
</body>
</html>

Chạy thử : http://localhost/cakephp/books/paging

Hướng dẫn học:  Phân trang dữ liệu với CakePHP

Tags: 
File: 
Bạn thấy bài viết này như thế nào?: 
Average: 4.1 (7 votes)
Ảnh của Khanh Hoang

Khanh Hoang - Kenn

Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Hướng dẫn build a Blog trong Drupal 8: Using Views

Hướng dẫn build a Blog trong Drupal 8: Using Views

Just when you thought Drupal 8 couldn't get more powerful; I give to you Views in core

Drupal Vs WordPress – CMS Nào Phù Hợp Cho Mình?

Drupal Vs WordPress – CMS Nào Phù Hợp Cho Mình?

Drupal và WordPress là mã nguồn mở hệ thống quản trị nội dung kỹ thuật số (CMS) mà có thể được sử dụng để quản lý trang web của bạn, thiết lập diễn đàn, viết blog hoặc cả bán hàng trực tuyến.

Đưa website lên TOP 10 Google

Đưa website lên TOP 10 Google

Đối với một webmaster điều quan trọng đó là làm sao để có 1 website tốt.  Ai cũng biết website tốt cần phải có được hệ thống liên kết từ banner, logo, hay textlink.

Công ty diệt chuột T&C

 

Diet con trung