Xin chào,

Có một bạn hỏi mình về vấn đề chỉnh sửa lại link phân trang của CakePHP vì nó nhìn không đẹp lắm, nó có thêm một số thành phần không mong muốn như sau sort:Story.id/direction:desc, :page. Ví dụ có link như sau khi phân trang theo hướng dẫn của mình Bài 6 hoặc Bài 21  hoặc bài 31

doctruyen.local/the-loai/1-ecchi.html/page:2/sort:Story.id/direction:desc

Đúng là nhìn link như thế nó xấu thật ^^

Mục đích bài này chúng ta sẽ xử lý nó cho nó thân thiện trở lại.

Bước 1 : Đầu tiên chúng ta xử lý sort:Story.id/direction:desc trước. Việc hiển thị này nguyên nhân là do action trong Controller chúng ta không chỉ định chính xác là sort dữ liệu theo trường nào.

Cách khắc phục: trong $this->paginate() của controller bạn viết chỉ định chính xác sort như sau: ‘order’ => array(‘Story.id’ => ‘DESC’),

Ví dụ:


$this->paginate = array(
'fields' => array('id', 'name','updated','view'),
'conditions' => array('status' => 1,'category_id' =>$id),
'limit'=>2,
'order' => array('Story.id' => 'DESC'),
'recursive'=>-1
);

Sau đó các bạn load lại trang thì sẽ không còn nhìn thấy sort:Story.id/direction:desc nữa. Có một số bạn không gặp trường hợp này là do các bạn đã chỉ định nó rồi. Nhưng chắc sẽ xuất hiện cái :page  😀 

Bước 2: tiếp tục phần loại bỏ :page 

Phần này mình tìm hiểu được 2 cách:

Cách 1 dùng BeautyPaginatorHelper của CakePHP(mình không thích dùng lắm, các bạn ai muốn thì tự nghiên cứu nha)

Cách 2 đơn giản dễ sử dụng hơn, dùng hàm PHP thui:

Ở phần view hiển thị phân trang chúng ta có viết như sau:


<?php $this->Paginator->prev("Prev"); ?>
<?php $this->Paginator->numbers(array("separator"=>" ")); ?>
<?php $this->Paginator->next("Next"); ?>

Bây giờ sẽ thay thế lại bằng code ở dưới:


<?php
$prev_link = str_replace('page:', '', $this->Paginator->prev('« Prev'));
$next_link = str_replace('page:', '', $this->Paginator->next('Next »'));
$link = str_replace('page:', '',$this->Paginator->numbers(array("separator"=>" ")));
?>
<?php echo $prev_link; //$this->Paginator->prev("Prev"); ?>
<?php echo $link;//$this->Paginator->numbers(array("separator"=>" ")); ?>
<?php echo $next_link; //$this->Paginator->next("Next"); ?>

Thế là xong, chạy lại trang các bạn sẽ thấy kết quả. Hy vọng sẽ giúp được các bạn

Kết luận

  1. Nếu có thắc mắc gì các bạn để lại comment bên dưới mình sẽ trả lời sớm nhất có thể.
  2. Cảm ơn các bạn đã đọc.

Nongdanit.info
[Cakephp] Chỉnh sửa link phân trang cho thân thiện
Tagged on: