[CakePHP] View : Paginator

Trong các ứng dụng web chắc hẳn các bạn không thể tránh khỏi việc có rất nhiều dữ liệu và muốn phân trang chúng để hiển thị, thao tác được tốt hơn. Có rất nhiều các source code phân trang được chia sẻ trên internet, và có thể mỗi người sẽ có sở thích dùng một bộ nào đó. Trong phạm vị tìm hiểu về CakePHP, chúng ta sẽ cùng tìm hiểu chức năng phân trang dựng sẵn của CakePHP trong bài này. Giống như các code phân trang khác, các hàm của Paginator sẽ cho phép chúng ta tạo ra phân trang với các page link, next/previous links...

** 1) numbers($options = array()) **

Đây là hàm sẽ trả về một tập hợp các number page links, bạn có thể quyết định xem bao nhiêu link sẽ xuất hiện và mặc định sẽ là 8. Chi tiết các $options chúng ta có thể dùng là :

  • before : là nội dung sẽ được chèn vào trước number

  • after : là nội dung sẽ được chèn vào sau number

  • model : là Model để tạo number cho nó, mặc định là defaultModel() tức là Model hiện tại

  • modulus : sẽ quyết định bao nhiêu number trên trang, mặc định là 8.

  • separator : dùng để phân cách các link, mặc định là |

  • tag : là thẻ bao ngoài link, mặc định là thẻ span.

  • first : set bằng một số cho option này để định nghĩa số lượng các link đầu tiên. mặc định là false, và nếu chuỗi được truyền vào thì sẽ lấy chuỗi đó làm title cho page đầu tiên.

  • last : cùng logic với first nhưng sẽ là cho các link cuối cùng.

  • ellipsis : là ký hiệu lược bỏ đi những link ẩn không hiển thị ra, mặc định sẽ là ...

  • class : định nghĩa css class cho thẻ tag ở trên

  • currentClass : là css class định nghĩa cho link đang active, mặc định là current.

  • currentTag : là tag sử dụng cho page number hiện tại, mặc định là null.

Bên trên là một loạt các lựa chọn cho phép bạn thiết lập các number links tùy theo như cầu của bạn nhưng nếu không cần thiết hàm này hoàn toàn có thể được gọi không cần đối số, khi đó CakePHP sẽ tạo cho bạn theo các giá trị mặc định.

** 2) prev($title = '<< Previous', $options = array(), $disabledTitle = null, $disabledOptions = array()) **

Chắc hẳn tên hàm cũng đủ để hiểu rằng nó sẽ tạo link để di chuyển đến trang trước trang hiện tại. $title chính là text sẽ hiển thị khi view, còn $disabledTile sẽ text khi link bị disabled, ví dụ như khi page hiện tại đang là 1 thì sẽ không còn click đến trang trước 1 nữa. $options sẽ cho bạn thiết lập một số lựa chọn còn ngược lại $disabledOptions sẽ là các lựa chọn cho một link đã disabled.

  • tag : thẻ bao bên ngoài mà bạn muốn dùng, mặc định là thẻ span. Nếu set false thì lựa chọn này sẽ bị disabled.

  • escape : bạn có thể set để nội dung Html entity có bị encoded hay ko, mặc định là true.

  • model : là model để sử dụng, mặc định là model hiện tại.

  • disabledTag : là thẻ sẽ dử dụng thay thế thẻ a khi mà không còn trang trước để di chuyển nữa.

Xét một ví dụ về Previous link :

echo $this->Paginator->prev(array('clas' => 'prev disabled'));

// Output cho đoạn code trên khi ta đang ở trang nào đó (vd đang trang 10 active) mà có trang trước nó sẽ có dạng là
<span class="prev">
  <a rel="prev" href="/posts/index/page:1/sort:title/order:desc">
    << trước
  </a>
</span>
// Còn nếu bạn đang ở trang 1 thì output sẽ là
<span class="prev disabled"><< trước</span>

** 3) next($title = 'Next >>', $options = array(), $disabledTitle = null, $disabledOptions = array())**

Đây là hàm tương tự và ngược lại với prev(), nó sẽ tạo một link dùng để chuyển từ trang hiện tại đến trang sau nó. Do đó, cách sử dụng của next() cũng tương tự nên phần này sẽ lược bỏ.

4) first($first = '<< first', $options = array())

Hàm này trả về một hoặc một tập hợp các number link đầu tiên. Nếu bạn đang ở trang đầu tiên thì nó sẽ không trả về gì. Còn khi bạn set một số nguyên n, nó sẽ tạo n links cho n trang đầu tiên. Những lựa chọn mà bạn có thể set là

  • after : là nội dung sẽ được chèn vào sau link/tag

  • model : là Model để tạo number cho nó, mặc định là defaultModel() tức là Model hiện tại

  • separator : dùng để phân cách các link, mặc định là |

  • tag : là thẻ bao ngoài link, mặc định là thẻ span.

  • ellipsis : là ký hiệu lược bỏ đi những link ẩn không hiển thị ra, mặc định sẽ là ...

** 5) last($last = 'last >>', $options = array()) ** Hàm này tương tự như first().

** 6) counter($options = array())**

Hàm này trả về một counter string, nó sử dụng chuỗi có format và một số options để tạo ra indicator cho biết user đang ở đâu trong tập hợp các page. counter() có thể nhận các options sau :

  • **format **: dùng để định dạng format cho counter. Mặc định output format sẽ là dạng "1 of 10". Nhưng bạn cũng có thể sử dụng những option con trong format để định dạng theo ý mình với :

    • {:page} : trang đang được hiển thị

    • {:pages} : tổng số trang

    • {:curret} : số lượng record hiện đang được hiển thị

    • {:count} : tổng số record

    • {:start} : bản ghi bắt đầu của những record đang hiển thị

    • {:end} : bản ghi kết thúc của những record đang hiển thị

    • {:model} : là tên số nhiều của model theo human form. Ví dụ, model thực tế trong chương trình là "RecipePage" thì hiển thị ra là "recipe pages".

  • separator : là chuỗi giữa page hiện tại và số lượng pages, mặc định là "of".

  • model : tên của model, mặc định là model hiện tại.

Cùng xem đoạn code ví dụ sau :

echo $this->Paginator->counter(
    'Page {:page} of {:pages}, showing {:current} records out of
     {:count} total, starting on record {:start}, ending on {:end}.'
);
// Output
<em>Page 3 of 7, showing 20 records out of 105 total, starting on record 41, ending on 60.</em>

Đến đây, chúng ta đã có được nhưng thông tin cơ bản nhất để sử dụng được Paginator trong CakePHP. Ngoài ra, còn có một số hàm hữu ích khác mà bạn có thể tham khảo như links(), params(), url() ... nếu như muốn đi hết nội dung về helper này.