CodeIgnitor: Lớp Pagination
Nếu bạn không quen với khái niệm "pagination - phân trang", thì bản chất nó là tập hợp các link cho phép ta điều hướng từ trang này sang trang khác theo dạng như sau:
« First < 1 2 3 4 5 > Last »
Ví dụ
Dưới đây là một ví dụ đơn giản về cách phân trang, đoạn mã nằm trong một phương thức nào đó của controller:
$this->load->library('pagination'); $config['base_url'] = 'http://example.com/index.php/test/page/'; $config['total_rows'] = 200; $config['per_page'] = 20; $this->pagination->initialize($config); echo $this->pagination->create_links();
Lưu ý
Mảng $config chứa các biến cấu hình của bạn. nó sẽ được truyền tới phương thức $this->pagination->initialize() như thể hiện ở ví dụ trên. Mặc dù có khoảng 20 mục bạn có thể cấu hình, nhưng tối thiểu bạn cần cấu hình ba mục sau đây:
-
base_url: Đây là URL hoàn chỉnh tới controller class/function chứa phần phân trang của bạn. Trong ví dụ trên thì nó trỏ tới controller "Test" và hàm "page". Cần nhớ rằng bạn có thể định tuyến lại URI của bạn nếu muốn có một URL khác.
-
total_rows: Cấu hình tổng số bản ghi trong tập kết quả mà bạn dùng để phân trang. Thông thường thì đó là tổng số bản ghi mà bạn đã truy vấn được từ database.
-
per_page: Cấu hình số bản ghi mỗi trang mà bạn muốn thể hiện. Trong ví dụ trên tôi để là 20 tức là mỗi trang sẽ show 20 bản ghi.
Phương thức create_links() trả về chuỗi rỗng nếu không phân trang được.
Thiết lập các lựa chọn
Nếu bạn không muốn thiết lập các lựa chọn giống như ví dụ trên thì bạn có thể làm theo ý bạn bằng cách tạo một tập tin mới gọi là pagination.php, sau đó thêm một mảng có tên $config vào file đó, rồi lưu trữ file đó vào application/config/pagination.php và sau đó nó sẽ được sử dụng một cách tự động, tức là bạn sẽ không cần phải sử dụng phương thức $this->pagination->initialize().
Tùy chỉnh việc phân trang
Dưới đây là một danh sách tất cả các lựa chọn ta có thể truyền tới hàm khởi tạo để thiết kế sự hiển thị.
$config['uri_segment'] = 3;
Hàm phân trang sẽ tự động xác định số lượng đoạn của URI của bạn chứa số trang.
$config['num_links'] = 2;
Xác định số lượng link mà bạn muốn trước và sau trang đã được click. Ví dụ như nếu bạn đặt là 2 như ở trên thì hệ thống sẽ đặt hai con số mỗi bên ở hai bên trang đã được click, chẳng hạn bạn đã click trang 3 thì trước đó sẽ hiển thị 1 và 2, sau đó sẽ hiển thị 4 và 5.
$config['use_page_numbers'] = TRUE;
Mặc định thì đoạn URI sẽ sử dụng chỉ số cho việc phân trang, nếu bạn muốn thể hiện số trang thực sự thì bạn thiết lập là TRUE giống như trên.
$config['page_query_string'] = TRUE;
Mặc định thì thư viện phân trang giả sử rằng bạn đang sử dụng Các đoạn URI, và cấu trúc các link của bạn theo dạng sau:
http://example.com/index.php/test/page/20
Nếu bạn đặt $config['enable_query_strings'] thành TRUE thì các link của bạn sẽ tự động được chuyển sang dạng chuỗi truy vấn (Query Strings), khi đó link phân trang của bạn sẽ có dạng:
http://example.com/index.php?c=test&m=page&per_page=20
Lưu ý rằng biến "per_page" là biến mặc định, ta có thể thay tên bằng cách như sau:
$config['query_string_segment'] = 'your_string'
$config['reuse_query_string] = FALSE;
Mặc định các đối số của chuỗi truy vấn của bạn sẽ bị bỏ qua. Thiết lập cấu hình này thành TRUE sẽ thêm chuỗi truy vấn vào URL như sau:
http://example.com/index.php/test/page/20?query=search%term
Điều này sẽ giúp bạn kết hợp các đoạn URI với chuỗi truy vấn. Tuy nhiên, cấu hình này chỉ có từ phiên bản CI 3.0.
$config['prefix'] = '';
Thiết lập tiền tố vào đường dẫn. Tiền tố sẽ nằm ngay trước đoạn cuối cùng.
$config['suffix'] = '';
Thêm một hậu tố vào đường dẫn. Hậu tố sẽ được đặt ngay sau đoạn cuối cùng. Những hậu tố phổ biên như '.html', '.chn', ...
$config[‘use_global_url_suffix’] = FALSE;
Nếu đặt là TRUE thì nó sẽ ghi đè giá trị $config['suffix'] và thiết lập nó thành giá trị có trong $config['url_suffix'] trong tập tin application/config/config.php.
Thêm thẻ HTML
Nếu bạn muốn bao ngoài phần phân trang bằng một thẻ nào đó thì bạn làm như sau:
$config[‘full_tag_open’] = ‘<p>’;
Khi này thẻ mở sẽ được đặt ở bên trên phần phân trang.
$config[‘full_tag_close’] = ‘</p>’;
Còn thẻ đóng sẽ được đặt ở bên dưới phần phân trang.
Tùy chỉnh liên kết đầu tiên
$config[‘first_link’] = ‘First’;
Đặt như trên thì liên kết đầu tiên sẽ hiển thị là “first”. Nếu bạn không muốn sử dụng liên kết này thì bạn dặt là FALSE.
$config[‘first_tag_open’] = ‘<div>’;
Thẻ mở cho link “first”.
$config[‘first_tag_close’] = ‘</div>’;
Thẻ đóng cho link “first”.
$config[‘first_url’] = ‘’;
Một URL thay thế cho liên kết đầu tiên.
Tùy chỉnh liên kết cuối cùng
$config[‘last_link’] = ‘Last’;
Nếu thiết lập như trên thì liên kết cuối cùng sẽ hiển thị là “Last”. Nếu bạn không muốn sử dụng liên kết cuối cùng bạn thiết lập là FALSE.
$config[‘last_tag_open’] = ‘<div>’;
Thẻ mở cho liên kết “last”.
$config[‘last_tag_close’] = ‘</div>’;
Thẻ đóng cho liên kết “last”.
Tùy chỉnh liên kết “Next”
$config[‘next_link’] = ‘>’;
Nếu thiết lập như trên thì ngoài trang web sẽ hiển thị thành “next”. Bạn có thể bỏ đi liên kết nay bằng cách thiết lập là FALSE.
$config[‘next_tag_open’] = ‘<div>’;
Thẻ mở cho liên kết “next”.
$config[‘next_tag_close’] = ‘</div>’;
Thẻ đóng cho liên kết “next”.
Tùy chỉnh cho liên kết trước (Previous)
$config[‘prev_link’] = ‘<’;
Nếu thiết lập như trên thì văn bản hiển thị sẽ là “previous”. Thiết lập là FALSE sẽ không cho hiển thị liên kết này.
$config[‘prev_tag_open’] = ‘<div>’;
Thẻ mở cho liên kết “previous”.
$config[‘prev_tag_close’] = ‘</div>’;
Thẻ mở cho liên kết “previous”.
Tùy chỉnh cho liên kết hiện thời (Current)
$config[‘cur_tag_open’] = ‘<b>’;
Thẻ mở cho liên kết “current”.
$config[‘cur_tag_close’] = ‘</b>’;
Thẻ đóng cho liên kết “current”.
Tùy chỉnh cho các liên kết số (Digit)
$config[‘num_tag_open’] = ‘<div>’;
Thẻ mở cho liên kết “digit”.
$config[‘num_tag_close’] = ‘</div>’;
Thẻ đóng cho liên kết “digit”.
Ẩn các trang
Nếu bạn không muốn liệt kê các trang cụ thể (ví dụ như bạn chỉ muốn hiển thị các liên kết “next” và “previous” chẳng hạn) thì bạn làm như sau:
$config['display_pages'] = FALSE;
Thêm thuộc tính cho các link
Nếu bạn muốn thêm một thuộc tính nào đó cho link thì bạn có thể thiết lập cặp key/value như sau:
// Sẽ tạo ra: class="myclass" $config['attributes'] = array('class' => 'myclass')
Không cho phép dùng thuộc tính "rel"
Mặc định thì thuộc tính rel là thuộc tính động và được tạo cũng như thêm vào từng link một. Nếu bạn không muốn sử dụng thuộc tính này thì bạn làm như sau:
$config['attributes']['rel'] = FALSE;
Nguồn: https://codeigniter.com/user_guide/libraries/pagination.html