Đây là một library cũng khá là phổ biến, hay được sử dụng trong quá trình xây dựng ứng dụng website, nó có nhiệm vụ giúp chúng ta phân trang một cách dễ dàng. Bản chất của library pagination là nó chỉ tạo ra những đường link, chứ nó không hỗ trợ chúng ta giới hạn kết quả trả về, để làm được điều đó chúng ta phải thực thi thao tác với model, tức là phải đụng tới database & sử dụng active record đấy các bạn.
Load Library pagination
Cũng giống như các library trước, để có thể thao tác với nó chúng ta phải load nó trong controller. Ở bài viết này chắc các bạn đã hiểu rõ cách tạo controller cũng như action trong CI rồi nhé, nên tôi sẽ không nhắc lại nửa, tôi có controller là page và action là index, và trong ví dụ này tôi chỉ sử dụng duy nhất một action , nên tôi sẽ gọi library ngay tại action index, và ngay tại constructor tôi cũng phải load helper url ra để có thể khai báo đường dẫn đến controller và action muốn phân trang, helper là gì thì ở bài sau tôi sẽ giải thích sau.
1 2 3 4 5 6 7 8 9 10 | class Page extends CI_Controller{ public function __construct(){ parent::__construct(); $this ->load->helper( "url" ); } public function index(){ $this ->load->library( "pagination" ); } } |
1 2 3 4 | $config [ 'base_url' ] = "Đường dẫn controller & action muốn phân trang" ; $config [ 'total_rows' ] = "Tổng số record" ; $config [ 'per_page' ] = "Số record trên một trang" ; $this ->pagination->initialize( $config ); // Chạy phân trang |
1 2 3 | public function countAll(){ return $this ->db->count_all( $this ->_table); } |
1 2 3 4 5 6 7 8 9 | public function index(){ $this ->load->model( "Muser" ); $config [ 'total_rows' ] = $this ->Muser->countAll(); $config [ 'base_url' ] = base_url(). "index.php/page/index" ; $config [ 'per_page' ] = 3; $this ->load->library( 'pagination' , $config ); echo $this ->pagination->create_links(); } |
1 2 3 > Last ›
Để hình dung cho việc tại sao không thấy danh sách thành viên ở đâu cả, trả lời để có thể thấy được danh sách thì chúng ta phải xử lý thêm vài thao tác trong model ví dụ như dùng result_array() lấy toàn bộ record đổ nó ra một cái mảng, truyền tham số vào view & show dữ liệu ngay trong view. Tất nhiên là phải giới hạn kết quả, mà muốn giới hạn kết quả thì phải dùng limit() và nhớ rằng trong CI phần limit nó khác một xíu chính là lấy từ tổng số record rồi mới đến vị trí bắt đầu.
1 2 3 4 5 | public function getList( $total , $start ){ $this ->db->limit( $total , $start ); $query = $this ->db->get( "user" ); return $query ->result_array(); } |
1 2 3 4 5 6 7 8 9 10 11 | public function index(){ $this ->load->model( "Muser" ); $config [ 'total_rows' ] = $this ->Muser->countAll(); $config [ 'base_url' ] = base_url(). "index.php/page/index" ; $config [ 'per_page' ] = 3; $start = $this ->uri->segment(3); $this ->load->library( 'pagination' , $config ); $data [ 'data' ]= $this ->Muser->getList( $config [ 'per_page' ], $start ); $this ->load->view( "page_view" , $data ); } |
1 2 3 | echo "<pre>" ; print_r( $data ); echo "<pre>" ; |
Array
(
[0] => Array
(
[id] => 1
[username] => admin
[password] => 123456
[level] => 2
)[1] => Array
(
[id] => 2
[username] => alibaba
[password] => 123456
[level] => 1
)
[2] => Array
(
[id] => 3
[username] => vicky
[password] => 123456
[level] => 1
)
)
1 2 3 > Last ›
Các vấn đề mở rộng trong pagination
- Độ phân giản của link: khi bạn click vào link 3 thì phía nó hiển thị như sau 1 2 3 4 5.
1 | $config [ 'num_links' ] = 2; |
1 | $config [ 'use_page_numbers' ] = TRUE; |
Mạng xã hội