Trong bài 6 chúng ta đã cùng tìm hiểu sơ qua cách phân trang dữ liệu trong CakePHP, và trong bài này sẽ cùng tìm hiểu rõ hơn về PaginatorHelper để vận dụng vào các ứng dụng một cách thuận lợi hơn. Giống như các code phân trang khác, các hàm của Paginator cho phép chúng ta tạo ra phân trang với các page link, next/previous links.

Creating sort links

sort($key, $title = null, $options = array()): tạo ra các link sắp xếp, với các kiểu sắp xếp là ASC(mặc định) và DESC:

  • $key (string) – tên key mà chúng ta sẽ sort (trường trong table).
  • $title (string) – Tiêu đề cho liên kết này nếu rỗng sẽ lấy key làm tiêu đề
  • $options (array) – tùy chọn cho sort(escape, model, direction, lock).

Ví dụ:

 echo $this->Paginator->sort('user_id'); 

Output:

 <a href="/posts/index/page:1/sort:user_id/direction:asc/">User Id</a> 
 echo $this->Paginator->sort('user_id', 'User account'); 

Output:

 <a href="/posts/index/page:1/sort:user_id/direction:asc/">User account</a> 

echo $this->Paginator->sort(
'user_id',
'<em>User account</em>',
array('escape' => false)
);

Output:


<a href="/posts/index/page:1/sort:user_id/direction:asc/">
<em>User account</em>
</a>


echo $this->Paginator->sort('user_id', null, array('direction' => 'desc'));

echo $this->Paginator->sort('user_id', null, array('direction' => 'asc', 'lock' => true));

Output:

 <a href="/posts/index/page:1/sort:user_id/direction:desc/">User Id</a>

Creating page number links

numbers($options = array()): Đây là hàm trả về một tập hợp các number page links. 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.

Đối với numbers chúng ta hoàn toàn có thể gọi không có đối số. CakePHP sẽ tự tạo cho chúng ta một kiểu phân trang theo mặc định.

Creating jump links

prev($title = ‘<< Previous’, $options = array(), $disabledTitle = null, $disabledOptions = array()): đây làm hàm tạo ra link để di chuyển đến trang phía trước trang hiện tại,  $title chính là text sẽ hiển thị khi view, $disabledTile sẽ text khi link bị disabled, $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.

echo $this->Paginator->prev(
'<< ' . __('previous'),
array(),
null,
array('class' => '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">
<< previous
</a>
</span>
// Còn nếu bạn đang ở trang 1 thì output sẽ là
<span class="prev disabled"><<previous</span>

&nbsp;

chúng ta có thể thay đổi thẻ html hiển thị ra bảng tag

echo $this->Paginator->prev(__('previous'), array('tag' => 'li'));

Output:


<li class="prev">
<a rel="prev" href="/posts/index/page:1/sort:title/order:desc">
previous
</a>
</li>

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ự.

first($first = ‘<< first’, $options = array())

Trả về một hoặc một tập hợp các number link đầu tiên. Khi bạn set một số nguyên n, nó sẽ tạo n links cho n trang đầu tiên. Option có các tham số:

  • 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à …

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

counter($options = array()): Hàm này trả về một counter string, 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, có 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.

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>

current(string $model = null): lấy trang hiện tại của mô hình đã cho


// Our URL is: http://example.com/comments/view/page:3
echo $this->Paginator->current('Comment');
// Output is 3

hasNext(string $model = null): Trả về true nếu kết quả được thiết lập không phải là ở trang cuối cùng

hasPrev(string $model = null): Trả về true nếu kết quả được thiết lập không phải là ở trang đầu tiên.

hasPage(string $model = null, integer $page = 1): Trả về true nếu đặt kết quả nhất định có số trang nhất định bởi $page.

Đến đây, chúng ta đã tìm hiểu đượ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 mời các bạn tham khảo thêm trên trang chủ CakePHP tại đây

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] Bài 20 – PaginatorHelper trong CakePHP