Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. CodeIgniter
Code

Phân trang trong CodeIgniter: Hướng dẫn Hoàn chỉnh

by
Difficulty:BeginnerLength:LongLanguages:

Vietnamese (Tiếng Việt) translation by Dai Phong (you can also view the original English article)

Lợi ích của việc sử dụng framework full stack cho ứng dụng web đó là bạn không phải lo lắng về các tác vụ thông thường như xử lý đầu vào, kiểm tra form và những thứ tương tự, vì framework đã cung cấp các wrapper cho các tính năng đó. Do đó, nó cho phép bạn tập trung vào logic của ứng dụng thay vì làm đi làm lại những công việc đó.

Hôm nay, chúng ta sẽ khám phá một thư viện quan trọng trong framework CodeIgniter - thư viện phân trang.

Để tôi khái quát các chủ đề mà chúng ta sẽ thảo luận trong bài viết này:

  • Minh hoạ cơ bản về chức năng phân trang
  • Khám phá các tùy chọn tùy biến
  • Cấu hình phân trang

Minh hoạ cơ bản về chức năng phân trang

Trong phần này, chúng ta sẽ đi tìm hiểu một ví dụ minh hoạ việc sử dụng phân trang trong CodeIgniter. Đó là cách tốt nhất để hiểu mọi thứ hoạt động như thế nào.

Trong ví dụ của chúng ta, chúng ta sẽ xây dựng một danh sách người dùng khá đơn giản, trong đó chúng ta sẽ truy vấn các bản ghi từ bảng users trong CSDL MySQL. Để chạy thành công ví dụ này, hãy đảm bảo rằng bạn có các trường uiduname trong bảng users của bạn.

Với thiết lập đó, chúng ta đã sẵn sàng để thực hiện.

Hãy tiếp tục và tạo một tập tin controller controllers/Paging.php với các nội dung sau.

Tiếp theo, chúng ta sẽ cần một tập tin model models/Users.php để lấy các bản ghi từ bảng users.

Cuối cùng, hãy tạo một tập tin view views/user_listing.php để hiển thị danh sách người dùng.

Bây giờ, hãy truy cập vào trang tùy biến của chúng ta tại http://your-code-igniter-site/paging/index và bạn sẽ thấy danh sách người dùng được phân trang! Như vậy là chúng ta thực hiện xong! Đừng lo lắng, tôi sẽ không bỏ mặc bạn sớm như vậy đâu, vì chúng ta sẽ bắt đầu phân tích từng phần của đoạn code ngay bây giờ.

Chúng ta sẽ bắt đầu với tập tin model models/Users.php vì đó là những thứ sẽ được gọi từ các phương thức controller của chúng ta. Có hai phương thức quan trọng, get_current_page_recordsget_total, các cài đặt model đó của chúng ta nhằm xây dựng các liên kết phân trang.

Hãy tìm hiểu phương thức get_total. Nó được sử dụng để đếm số bản ghi trong bảng users.

Tiếp theo, phương thức get_current_page_records.

Có hai đối số quan trọng mà bạn nên lưu ý trong phương thức get_current_page_records. Đối số đầu tiên, $limit, được sử dụng để chỉ định số bản ghi sẽ được trả về trong quá trình thực thi truy vấn. Và đối số thứ hai, $start, đóng vai trò như là chỉ số bắt đầu của bản ghi.

Như bạn thấy đấy, với các giá trị của $start$limit chúng ta có thể lấy về các bản ghi theo trang. Đó là bản chất của phân trang, và như vậy chúng ta đã cài đặt phương thức quan trọng nhất của bài viết này!

Như vậy, đó là model của chúng ta - đơn giản!

Tiếp tục, chúng ta hãy tập trung vào tập tin controller. Hãy lấy code của phương thức constructor.

Để sử dụng phân trang trong CodeIgniter, điều đầu tiên bạn cần làm là nạp thư viện phân trang (pagination). Và chúng ta có thể làm điều đó bằng cách sử dụng $this->load->library('pagination').

Đồng thời chúng ta nạp URL helper để chúng ta có thể sử dụng các hàm trợ giúp toàn cục được cung cấp bởi helper đó.

Bây giờ, chúng ta đã sẵn sàng để đi sâu vào trái tim của controller - phương thức index.

Để bắt đầu, chúng ta đảm bảo rằng cơ sở dữ liệu được nạp đúng cách. Sau đó, chúng ta nạp model Users để chúng ta có thể sử dụng các phương thức của model đó.

Tiếp theo, chúng ta khởi tạo một vài biến quan trọng.

Biến $limit_per_page xác định giới hạn trên mỗi trang. Tất nhiên, bạn có thể thiết lập nó tuỳ ý bạn; nó được thiết lập thành 1 tại thời điểm này nhằm mục đích minh hoạ.

Biến $start_index giữ chỉ số bắt đầu của bản ghi trong MySQL. Khi CodeIgniter xây dựng các liên kết phân trang, mặc định nó sẽ nối thêm chỉ mục bắt đầu của trang như là phân đoạn thứ ba trong URL. Bạn có thể thay đổi hành vi mặc định này, nhưng đó là điều mà chúng ta sẽ để dành cho phần cuối cùng của bài viết này, nơi chúng ta sẽ thảo luận các tuỳ chọn tùy biến.

Cuối cùng, chúng ta gọi phương thức get_total của model Users để lấy tổng số bản ghi của bảng users và nó được gán cho biến $total_records.

Tiếp theo, chúng ta lấy các bản ghi của trang hiện tại bằng phương thức get_current_page_records.

Trước khi chúng ta có thể thật sự xây dựng các liên kết phân trang, chúng ta cần phải khởi tạo cấu hình phân trang tối thiểu bằng phương thức initialize của thư viện phân trang.

Và đó là bộ tham số tối thiểu để xây dựng các liên kết phân trang.

  • base_url: URL sẽ được sử dụng khi xây dựng các liên kết phân trang
  • total_rows: Tổng số bản ghi
  • per_page: Số bản ghi trên mỗi trang

Cuối cùng, chúng ta sử dụng phương thức create_links để xây dựng các liên kết phân trang.

Phần còn lại chỉ mang tính hình thức là gọi view user_listing và kết xuất ra! Truy cập URL http://your-code-igniter-site/paging/index để xem danh sách người dùng cùng với các liên kết phân trang.

Như vậy, đó là một ví dụ phân trang vô cùng đơn giản nhưng hữu ích mà bạn có thể mở rộng để phù hợp với các yêu cầu của bạn.

Trong phần tiếp theo, chúng ta sẽ khám phá cách bạn có thể tùy biến phân trang mặc định liên quan đến giao diện và chức năng.

Khám phá các Tùy chọn Tuỳ biến

Trong phần này, chúng ta sẽ khám phá các tùy chọn có sẵn mà bạn có thể sử dụng nếu bạn muốn tùy biến các liên kết phân trang mặc định.

Phân đoạn URL

Mặc dù thư viện phân trang của CodeIgniter tự động nhận biết tham số liên quan đến phân trang từ URL, nhưng bạn có thể định nghĩa một giá trị tùy biến nếu bạn có mẫu URL khác.

Số của Liên kết

Tùy chọn num_links cho phép bạn định nghĩa con số liên kết chữ số sẽ được hiển thị trước và sau số trang hiện tại trong liên kết phân trang.

Số trang đóng vai trò là Phân đoạn URI

Khi bạn truy cập vào phân đoạn URI phân trang, mặc định nó là một chỉ mục bắt đầu. Ví dụ, nếu bạn có mười bản ghi trên mỗi trang, thì phân đoạn URI phân trang là 20 cho trang thứ ba. Thay vào đó, nếu bạn muốn hiển thị số trang thực tế trong các liên kết phân trang, bạn có thể thiết lập use_page_numbers thành TRUE.

Tất nhiên, bạn cần phải đảm bảo rằng bạn tính toán chỉ số bắt đầu sao cho thích hợp dựa trên số trang mà bạn lấy ra từ URL.

Giữ nguyên Chuỗi Truy vấn

Thường thì, bạn sẽ gặp tình huống nơi mà bạn muốn giữ nguyên các tham số của chuỗi truy vấn không liên quan đến phân trang. Bạn có thể sử dụng tùy chọn reuse_query_string để kích hoạt tính năng đó.

Đây là một vài tuỳ chọn mà bạn có thể sử dụng để thay đổi chức năng phân trang mặc định. Tiếp theo, chúng ta sẽ xem xét một vài tùy chọn khác cho phép bạn thay đổi cái cách các liên kết phân trang được hiển thị.

Thẻ Wrapper

Nếu bạn muốn bọc code phân trang bằng bất kỳ thẻ HTML nào khác thì bạn có thể thực hiện bằng cách sử dụng các tùy chọn full_tag_openfull_tag_close.

Nó có thể thật sự hữu ích nếu bạn muốn áp dụng phong cách tùy biến cho các liên kết phân trang.

Trang đầu, Trang cuối, Tiếp theo, và Trước đó

Nếu bạn muốn thay đổi phần văn bản đại diện cho các liên kết trang đầu, trang cuối, tiếp theo và trước đó, thì bạn cũng có thể làm điều đó.

Ngoài ra, nếu bạn muốn bọc các liên kết riêng lẻ đó đó bằng bất kỳ thẻ HTML nào, bạn có thể thực hiện theo cách tương tự như chúng ta đã làm để bọc toàn bộ code phân trang.

Liên kết hiện tại và liên kết số

Đôi khi, bạn muốn trang trí liên kết hiện tại khác những liên kết còn lại. Bạn có thể làm điều đó bằng cách áp dụng các thẻ wrapper như dưới đây.

Tương tự, nếu bạn muốn bọc các liên kết số bằng một cái gì đó:

Và điều đó đã kết thúc câu chuyện về tuỳ biến. Trên thực tế, bạn có thể xem ví dụ về tuỳ biến tại trang http://your-code-igniter/site/custom đã được bao gồm trong tập tin controller của chúng ta!

Cấu hình Phân trang

Bây giờ bạn đã tìm hiểu về cấu hình cần thiết để thiết lập một phân trang khá hoàn chỉnh với bất kỳ model nào. Và phần lớn, bạn muốn giữ cho nó trông giống nhau trên toàn bộ trang web. Bạn sẽ làm gì để đạt được điều đó? Nếu không biết, bạn có thể sao chép code cấu hình và dán nó vào mỗi hành động yêu cầu cấu hình phân trang.

Thực tế, có một cách tốt hơn để bạn có thể xử lý tình huống này. Bạn có thể tạo tập tin cấu hình phân trang tại application/config/pagination.php và sử dụng biến $config để định nghĩa các cài đặt của bạn.

Dựa vào đó, phương thức hành động index được sửa đổi sẽ như sau:

Tất nhiên, các biến total_rowsbase_url sẽ thay đổi ứng với các hành động khác nhau, vì vậy bạn cần thiết lập chúng một cách rõ ràng trong mỗi hành động.

Để thực hiện điều đó, bạn cần phải nạp cấu hình phân trang lúc bắt đầu.

Tiếp theo, bạn có thể thay thế các cài đặt cụ thể của hành động.

Và bạn hoàn thành nó!

Như vậy đó là câu chuyện về cấu hình phân trang, và nó cũng đã kết thúc bài viết này!

Phần tóm tắt

Hôm nay, chúng ta đã đi tìm hiểu về thư viện phân trang trong CodeIgniter.

Trong phần đầu của bài này, tôi đã minh hoạ cách bạn có thể sử dụng thư viện phân trang bằng cách cung cấp một ví dụ rất đơn giản nhưng hữu ích.

Sau đó, chúng ta đã thảo luận về các tùy chọn tùy biến sẵn có trong khi thiết lập phân trang.

Sau cùng, chúng ta đã thảo luận về việc cấu hình phân trang trong phần cuối.

CodeIgniter là một nền tảng PHP mạnh mẽ. Cho dù bạn chỉ mới bắt đầu làm quen hay bạn đang bắt đầu với phiên bản tiếp theo, thì cũng đừng quên tham khảo những gì chúng tôi có thể cung cấp cho bạn.

Tôi rất muốn biết phản hồi của bạn thông qua các yêu cầu và bình luận ở bên dưới đây!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.