CODEIGNITER 3X
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Bài 7: Load Library Pagination Trong Codeigniter

Trong bài này bạn sẽ được học:

  1. Các thao tác xử lý với phân trang.
  2. Các vấn đề mở rộng trong pagination.

Lưu ý:
Tôi sử dụng Codeigniter version 2.1.4.
Tên folder của tôi là citest cho bài viết này.


Đâ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.

class Page extends CI_Controller{
    public function __construct(){
        parent::__construct();
        $this->load->helper("url");
    }
 
    public function index(){
       $this->load->library("pagination");
    }
}
Để bắt đầu tiến hành phân trang chúng ta cần phải khai báo một số tham số như sau. Và tất nhiên với các tham số này chỉ là basic thôi nhé các bạn. Để áp dụng vào thực tế thì chúng ta cần phải kết hợp thêm rất nhiều thứ để có thể hoàn chỉnh phân trang cho một action trong controller.
$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
Để giới hạn kết quả trả về chúng ta cần phải thao tác với model, trong ví dụ này tôi sẽ dùng lại file muser.php, cái đầu tiên mà chúng ta cần viết, chính là phải tính tổng số record có bao nhiêu trong database. Ở đây active record hỗ trợ chúng ta hàm count_all() dùng để tính tổng record.
public function countAll(){
        return $this->db->count_all($this->_table); 
}
Tiếp theo tôi sẽ load model ngay trong action index, thông tin đầu tiên mà tôi phải cấu hình chính là tổng số record trong database thông qua phương thức countAll mà tôi vừa viết trong model muser, sau đó cấu hình đường dẫn cho controller & action muốn phân trang, để nạp đường dẫn một cách 9 xác, tôi sẽ dùng hàm base_url() được hỗ trợ trong helper url. Và tất nhiên tôi cũng phải cấu hình bao nhiêu record trong một trang tức là phần per_page đó các bạn. Chúng ta phải bắt buộc truyền biến config vào library pagination để có thể thực thi việc phân trang. Cuối cùng tôi echo trực tiếp hàm create_links() trong controller để show kết quả xem chúng ta phân trang có thành công chưa, nên nhớ việc đổ dữ liệu chỉ nên thao tác trong view thôi nhé.
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();
    }
Nếu màn hình kết quả trả về như sau xem như thao tác thành công.

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.
 public function getList($total, $start){
        $this->db->limit($total, $start);
        $query=$this->db->get("user");
        return $query->result_array();
 }
Muốn thao tác trong việc show danh sách thành viên ta phải gọi phương thức getList() trong controller, truyền vào nó 2 tham số, số record trong một trang & vị trí bắt đầu, muốn có đươc vị trí bắt đầu thì ta phải get được cái đường dẫn của nó, chính là get cái id đó các bạn, trong CI nó có một helper hỗ trợ chúng ta lấy được đường dẫn và khuyến cáo không được sử dụng phương thức $_GET, vì nó không an toàn. phương thức thay thế nó chính là $this->uri->segment(tham số), để có thể lấy đường dẫn một cách chính xác tôi có cách đếm như sau , ví dụ link localhost/citest/index.php/page/index/???, page = controller ứng với vị trí số 1, index = action , và tham số vị trí $start chính là vị trí thứ 3.
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);
    }
Nhiệm vụ của getList là đổ về dữ liệu những cái mảng chứa thông tin user và chúng ta sẽ phải làm việc trong view, tôi tạo file page_view.php, và bên trong nó tôi cũng in dữ liệu trong cặp thẻ pre.
echo "<pre>";
print_r($data);
echo "<pre>";
"; echo $this->pagination->create_links(); Nếu kết quả trả về như trên, chúng ta đã tiến hành phân trang và kiểm soát record trả về thành công.

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.

$config['num_links'] = 2;
- Sử dụng theo từng số trang: Bình thường link sẽ lấy tham số là vị trí bắt đầu tức là 3 , sau đó click trang 2 nó sẽ nhảy ra tham số là 9, sử dung phương thức này khi bạn click vào trang 2 nó sẽ hiển thị link như sau localhost/citest/index.php/page/index/2. tức là sử dụng 9 xác vị trí của trang.
$config['use_page_numbers'] = TRUE;
Ngoài ra còn rất nhiều phương thức hỗ trợ chúng ta trong việc phân trang, các bạn tự tìm hiểu sâu hơn nhé, tôi chỉ hướng dẫn đến đây thôi.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Kết:

Để có thể phân trang cho một action nào đó, các bạn cần phải nắm rõ những phương thức mà tôi vừa nêu ở trên, thật ra nó rất là đơn giản, nhưng cái user guide của nó viết chung chung quá, khiến quá trình tìm hiểu của chúng ta gặp khó khăn, nhưng chỉ cần làm giống những gì tôi vừa trình bày ở trên là có thể phân trang bất cứ action nào mà bạn mong muốn.

 

Cùng chuyên mục:

Chia sẻ theme web blog mobile đơn giản (Theme FMB1)

Chia sẻ theme web blog mobile đơn giản (Theme FMB1)

Freetuts Mobile Blog được code trên nền tảng PHP và MySQL, sử dụng Codeigniter Framework.

Bài 19: Rewrite URL trong Codeigniter

Bài 19: Rewrite URL trong Codeigniter

Sau một khoảng thời gian không đụng tới Codeigniter thì hôm nay lại có dịp…

Tìm hiểu quy trình load model trong codeigniter

Tìm hiểu quy trình load model trong codeigniter

Việc load model rất quen thuộc với những bạn sử dụng framwork codeigniter nhưng đôi…

Tự tạo thư viện load widget trong codeigniter

Tự tạo thư viện load widget trong codeigniter

Như các bạn biết mặc định hệ thống của Codeigniter hoạt động theo mô hình…

Hướng dẫn custom bộ core codeigniter

Hướng dẫn custom bộ core codeigniter

Có khi nào bạn đặt câu hỏi có nên sửa các file nằm trong bộ…

Bài 18: Tìm Hiểu Library Shopping Cart trong Codeigniter

Bài 18: Tìm Hiểu Library Shopping Cart trong Codeigniter

Chào mừng các bạn đã quay trở lại freetuts.net. Như vậy ở bài trước chúng…

Bài 17: Xây dựng crud add - update - edit user

Bài 17: Xây dựng crud add - update - edit user

Crud là một thuật ngữ không hề xa lạ với dân lập trình, nó là…

Bài 16: Kỹ thuật master layout trong codeigniter

Bài 16: Kỹ thuật master layout trong codeigniter

Đây là một vấn đề mở rộng mà CI không đề cập trong user guide,…

Bài 15: Tìm Hiểu Helper Language Trong Codeigniter

Bài 15: Tìm Hiểu Helper Language Trong Codeigniter

Trong bài viết này , chúng ta chỉ tìm hiểu ở khái niệm cơ bản…

Bài 14: Tìm Hiểu Helper Text Trong Codeigniter

Bài 14: Tìm Hiểu Helper Text Trong Codeigniter

Nhìn tiêu đề, hẳn các bạn đã đoán ra hôm nay chúng ta sẽ tìm…

Bài 13: Tìm Hiểu Helper Date Trong Codeigniter

Bài 13: Tìm Hiểu Helper Date Trong Codeigniter

Hôm nay chúng ta sẽ tiếp tục tìm hiểu sâu hơn về các helper mà…

Bài 12: Đóng dấu watermark image trong codeigniter

Bài 12: Đóng dấu watermark image trong codeigniter

Đầu tiên xin gửi lời cảm ơn các bạn đã quan tâm và theo dõi…

Bài 11: Tìm Hiểu Library Image Trong Codeigniter

Bài 11: Tìm Hiểu Library Image Trong Codeigniter

Kết thúc bài trước, chúng ta đã hoàn thành khá xuất sắc phần upload hình…

Bài 10: Tìm hiểu library upload trong codeigniter

Bài 10: Tìm hiểu library upload trong codeigniter

Chào mừng các bạn đã quay trở lại freetuts.net, đã lâu rồi tôi không viết…

Bài 9: Tìm Hiểu Library Form Validation

Bài 9: Tìm Hiểu Library Form Validation

Cho tới bài viết này, chắc hẵn các bạn đều đã biết rõ cách load…

Bài 8: Tìm hiểu Helper Url Và Form Trong Codeigniter

Bài 8: Tìm hiểu Helper Url Và Form Trong Codeigniter

Trong Codeigniter Framework nó chia ra 2 khái niệm đó là helper & library, vậy…

Bài 6: Load Library Database Trong Codeigniter

Bài 6: Load Library Database Trong Codeigniter

Tôi sẽ không giới thiệu về library này mà sẽ xoáy sâu vào các thao…

Bài 5: Load Library Session Trong Codeigniter

Bài 5: Load Library Session Trong Codeigniter

Đây là một thư viện khá là quan trọng , trong framework CI (Codeigniter) .…

Bài 4: Load Model Trong Codeigniter

Bài 4: Load Model Trong Codeigniter

Trong Codeigniter để kết nối với Database chúng ta phải cấu hình thông tin cho…

Bài 3: Load View Trong Codeigniter

Bài 3: Load View Trong Codeigniter

Trong Codeigniter tất cả các Views đều được đặt trong thư mục application/views. Các bạn…

Top