Thứ Năm, 18 tháng 6, 2015

Phân trang trong CakePHP Framework

Trong bài trước chúng ta đã tìm hiểu cách thao tác trên cơ sở dữ liệu trong CakePHP Framework. Tiếp theo trong phần này chúng ta sẽ đi tìm hiểu một kỹ thuật phổ biến và được sử dụng trong hầu hết các ứng dụng đó là kỹ thuật phân trang. Cụ thể bài này chúng ta sẽ tìm hiểu Phân trang trong CakePHP Framework.

                                                                hình ảnh minh họa

Giả sử ta làm việc với bảng dữ liệu như trong bài trước. Ta sẽ thay đổi nội dung file InfosController như sau :
<?php
class InfosController extends  AppController{
    var $name = "Infos";// ten cua Controller Info
    var $helpers = array('Paginator','Html');
    var $components = array('Session');
    var $paginate = array();
       
    function paging(){
        $this->paginate = array(
          'limit' => 3,
          'order' => array('id' => 'desc'),
        );
        $data = $this->paginate("Info");
        $this->set("data",$data);
    }
?>

Để sử dụng chức năng phân trang trong CakePHP Framework thì cần có helper Paginator
var $helpers = array('Paginator','Html');

và namespace paginate
var $paginate = array();

Chúng ta sẽ lấy 3 bản ghi đầu tiên theo id giảm dần
$this->paginate = array(
  'limit' => 3,
  'order' => array('id' => '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à Info.
$data = $this->paginate("Info")

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(‘…’).
Như vậy là chúng ta có thể phân trang trong CakePHP Framework, mặc định CakePHP sẽ dùng biến page để xác định trang hiện tại. Bây giờ chúng ta chỉ cần xây dựng view để hiển thị phân trang trong quá trình học PHP.

Trong thư mục app/views/infos ta tạo một file có tên là paging.ctp có nội dung như sau :

<html>
<body>
<?php
    // Tạo link về trang trước
    echo $this->Paginator->prev('« Previous ', null, null, array('class' => 'disabled'));

    // Tạo link tương ứng với số trang
    echo " | ".$this->Paginator->numbers()." | ";

    // Tạo link đi đến trang sau
    echo $this->Paginator->next(' Next »', null, null, array('class' => 'disabled'));

    // Hiển thị trang hiện tại và tổng số trang
    echo " Page ".$this->Paginator->counter();
?>

<?php
if($data==NULL){
    echo "<h2>Dada Empty</h2>";
}
else{
    echo "<table>
          <tr>
            <td>id</td>
            <td>Name</td>
            <td>Email</td>
            <td>Phone</td>
          </tr>";
    foreach($data as $item){
        echo "<tr>";
        echo "<td>".$item['Info']['id']."</td>";
        echo "
          <td><a href='".$this->webroot."infos/view/".$item['Info']['id']."' >".$item['Info']['name']."</a>
          </td>";
        echo "<td>".$item['Info']['email']."</td>";
        echo "<td>".$item['Info']['phone']."</td>";
        echo "</tr>";
    }
}
?>
</body>
</html>

Nguồn: the gioi web

SHARE THIS

0 nhận xét:

Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.