Cách Phân trang Dữ liệu với PHP

Tôi hoàn toàn có thể nhớ những năm trước đây khi lần tiên phong tôi mở màn viết code PHP và MySQL, tôi rất hào hứng khi lần tiên phong tôi có được thông tin từ một cơ sở tài liệu để hiển thị trên một trình duyệt web .
Đối với những người có ít kỹ năng và kiến thức về cơ sở tài liệu và lập trình, việc nhìn thấy những dòng tài liệu đó hiển thị trên màn hình hiển thị dựa theo code mà tôi đã viết ( được rồi, cho nên vì thế nên tôi đã sao chép một ví dụ từ một cuốn sách ) đã cho tôi một sự hân hoan cao độ. Có thể tôi đã không hiểu hết toàn bộ mọi thứ lúc đó, nhưng thành công xuất sắc tiên phong đó đã thôi thúc tôi đến những dự án Bất Động Sản lớn hơn và tốt hơn.

Mặc dù mức độ hồ hởi của tôi đối với cơ sở dữ liệu có thể không còn giống như trước,
nhưng kể từ khi “hello world” đầu tiên của tôi với PHP và MySQL tôi đã bị cuốn hút vào
sức mạnh trong việc làm cho mọi thứ trở nên đơn giản và dễ sử dụng.

Là một nhà phát triển, một vấn đề mà tôi thường xuyên phải đối mặt đó là lấy một lượng lớn thông tin và làm cho nó dễ tiếp thu. Cho dù nó là danh sách khách hàng của một công ty lớn hoặc một danh sách mp3 của cá nhân, thì việc phải ngồi và nhìn chằm chằm vào từng dòng dữ liệu có thể gây nhàm chán
và bực bội. Một nhà phát triển giỏi có thể làm được gì? Đó là phân trang!

1. Phân trang

Phân trang cơ bản là quá trình lấy một tập hợp các kết quả và phân chia
chúng thành các trang để làm cho chúng dễ xem hơn.

example 1example 1

Tôi nhận ra ngay từ đầu rằng nếu tôi có 5000 dòng thông tin để hiển thị thì không chỉ
làm người ta nhức đầu khi cố gắng đọc, mà hầu hết các trình duyệt sẽ mất
nhiều thời gian (khoảng hơn 5 giây) để hiển thị nó.

Để giải quyết vấn đề này tôi sẽ viết các lệnh SQL khác nhau để kéo ra các khối dữ liệu, và nếu tôi 
đang ở trong một tâm trạng tốt tôi thậm chí có thể đưa ra thêm một vài nút “next” và “previous”.
Sau một thời gian, việc phải đặt code này vào mọi dự án tương tự và tùy biến
nó để phù hợp đã trở nên lỗi thời. Nhanh. Và như mọi nhà phát triển giỏi đều biết, sự lười biếng sinh ra sự sáng tạo
hay đại loại thế. Vì vậy, một ngày nọ tôi ngồi xuống và quyết định nghĩ ra một
lớp PHP đơn giản, linh hoạt và dễ sử dụng sẽ tự động thực hiện công việc nặng nhọc
cho tôi.

Giới thiệu về tôi và các lớp PHP. Tôi không hướng đối tượng. Thực tế, tôi hầu như không
bao giờ sử dụng những thứ đó. Nhưng sau khi đọc một số hướng dẫn và ví dụ về OOP, và một số
thử nghiệm đơn giản và các ví dụ lỗi, tôi quyết định thử nó và bạn biết gì không?
Nó làm việc rất tốt với phân trang. Code được sử dụng ở đây được viết bằng PHP 4 nhưng sẽ
làm việc trong PHP 5.

2. Cơ sở dữ liệu

Cần phải yêu MySQL. Không có ý xúc phạm đến các hệ thống cơ sở dữ liệu khác hiện có, nhưng đối với tôi,
tất cả những gì tôi cần là MySQL. Và một tính năng tuyệt vời của MySQL là chúng cung cấp cho bạn một số
cơ sở dữ liệu mẫu miễn phí để khám phá tại http://dev.mysql.com/doc/#sampledb.

Đối với các ví dụ của tôi, tôi sẽ sử dụng cơ sở dữ liệu world (~ 90k nén) có chứa trên
4000 bản ghi để bạn thực hành, nhưng vẻ đẹp của script PHP mà chúng ta sẽ tạo ra là
nó có thể được sử dụng với bất kỳ cơ sở dữ liệu nào. Bây giờ tôi nghĩ rằng tất cả những gì chúng ta có thể đồng ý với nhau đó là nếu chúng ta quyết định
không phân trang các kết quả của chúng ta thì chúng ta sẽ gặp rắc rối với một số
kết quả rất dài và khó sử dụng như sau:

example 2
( nhấp vào để xem kích cỡ khá đầy đủ, khoảng chừng 338 k ) Vì vậy, hãy chia nhỏ tài liệu của tất cả chúng ta thành những trang dễ đảm nhiệm như thế này : example 3example 3

Đẹp chứ nhỉ? Một khi bạn bỏ lớp Pagination vào code của bạn, bạn có thể
chuyển đổi một cách nhanh chóng và dễ dàng một bộ dữ liệu khổng lồ thành các trang dễ dàng điều hướng với
chỉ một vài dòng code. Thật đấy.

3 . Paginator

Ví dụ này sẽ bao gồm hai script, lớp Paginator có thể tái sử dụng và tập tin index sẽ hiển thị các phần tử của bảng và các điều khiển.

Paginator.class.php

Lớp Paginator sẽ chỉ có hai phương thức và hàm xây dựng, chúng ta sẽ xây dựng nó dần dần, làm đến đâu giải thích đến đó.

Định nghĩa này chỉ thiết lập cho Paginator những biến thành viên thiết yếu, vì đây là lớp trợ giúp và nó chỉ dành cho phân trang, nó sẽ dựa vào một liên kết hợp lệ đến sever MySQL và một truy vấn đã được xác lập trước, cái mà tất cả chúng ta sẽ nối những tham số thiết yếu để phân trang tác dụng. Chúng ta sẽ khởi đầu với phương pháp kiến thiết xây dựng .
Khá đơn thuần phải không ? Phương thức này chỉ thiết lập liên kết cơ sở tài liệu và truy vấn thiết yếu của đối tượng người dùng, sau đó nó tính tổng số hàng truy xuất được bởi truy vấn đó mà không có bất kể số lượng giới hạn nào cũng không bỏ lỡ những tham số, số tổng này là thiết yếu để tạo ra những link cho phân trang .
Xin quan tâm rằng, để đơn thuần chúng tôi không kiểm tra lỗi hoặc bất kể kiểm tra tính hợp lệ nào của những tham số đã cho, nhưng trong một ứng dụng trong thực tiễn, việc kiểm tra này sẽ là thiết yếu .

Lấy về Kết quả

Bây giờ hãy tạo ra phương thức mà sẽ thật sự phân trang dữ liệu và trả về kết quả.

Hãy phân tích hàm này từng bước một, trước tiên chúng ta thiết lập các tham số limit (giới hạn) và page (trang), mặc định được thiết lập lần lượt là 10 và 1. Sau đó, chúng ta kiểm tra xem người dùng đang yêu cầu một số hàng hay tất cả chúng, dựa trên điều này và tham số page chúng ta thiết lập tham số LIMIT của truy vấn, “- 1” của page đang tính đến việc chúng ta đang bắt đầu các trang bằng 1 thay vì 0.

Sau đó, tất cả chúng ta chỉ cần nhìn nhận truy vấn và nhận về hiệu quả, ở đầu cuối tất cả chúng ta tạo ra một đối tượng người tiêu dùng tác dụng mới có chứa những tham số limit, page và total của truy vấn đã được thực thi cũng như tài liệu cho mỗi dòng đã truy xuất được .

Hiện thị các Liên kết Phân trang

Bây giờ hãy viết phương pháp được sử dụng để tạo ra những link phân trang .
Đây là một phương pháp khá dài, khoảng chừng 34 dòng code, vì thế giờ đây hãy làm rõ những gì đang diễ ra trong phương pháp này .

  1. Trước tiên chúng ta đánh giá xem liệu người dùng đang yêu cầu một số liên kết nhất định hay là tất cả, trong trường hợp thứ hai chúng ta chỉ cần trả về một chuỗi rỗng vì không cần phải phân trang.
  2. Sau đó, chúng ta tính toán trang cuối dựa trên tổng số dòng hiện có và các phần tử cần thiết trên mỗi trang.
  3. Sau đó, chúng ta lấy tham số links (liên kết) đại diện cho số liên kết để hiển thị bên dưới và bên trên trang hiện tại, và tính toán liên kết start và end.
  4. Bây giờ chúng ta tạo ra thẻ mở cho danh sách và thiết lập lớp của nó bằng tham số list_class và thêm liên kết “previous page”, lưu ý rằng, đối với liên kết này chúng ta kiểm tra xem trang hiện tại có là trang đầu hay không, và nếu như vậy, chúng ta thiết lập thuộc tính disabled cho liên kết.
  5. Tại thời điểm này, chúng ta hiển thị một liên kết đến trang đầu tiên và một biểu tượng dấu chấm lửng trong trường hợp liên kết start không phải là liên kết đầu tiên.
  6. Tiếp theo, chúng ta thêm các liên kết bên dưới và bên trên trang hiện tại dựa trên các tham số start và end được tính toán trước đó, trong mỗi bước chúng ta đánh giá một lần nữa trang hiện tại mà trang liên kết hiển thị và thiết lập lớp active cho phù hợp.
  7. Sau đó, chúng ta sẽ hiển thị một biểu tượng dấu chấm lửng khác và liên kết đến trang cuối trong trường hợp liên kết end không phải là cuối cùng.
  8. Cuối cùng, chúng ta hiển thị liên kết “next page” và thiết lập trạng thái disabled khi người dùng đang xem trang cuối, đóng danh sách và trả về chuỗi HTML được tạo ra.

Đó là tổng thể những gì có trong lớp Paginator, đương nhiên tất cả chúng ta hoàn toàn có thể thêm những hàm setter và getter cho những tham số liên kết cơ sở tài liệu, limit, page, query và total, nhưng để đơn thuần tất cả chúng ta sẽ làm nó theo cách này .

4 . Index.php

Bây giờ tất cả chúng ta sẽ tạo ra tập tin chịu nghĩa vụ và trách nhiệm sử dụng lớp Paginator và hiển thị tài liệu, vì thế trước hết hãy để tôi trình diễn cho bạn thấy HTML cơ bản .
Khá đơn thuần, tập tin này chỉ hiển thị một bảng mà tất cả chúng ta sẽ điền vào bằng những thông tin lấy được từ cơ sở tài liệu, chú ý quan tâm rằng, so với ví dụ này tôi đang sử dụng bootstrap để định phong thái cho trang .

Sử dụng Paginator

Bây giờ để tận dụng lớp Paginator của tất cả chúng ta, hãy thêm code php sau đây ở phía trên cùng của tài liệu .

Script này khá đơn giản, chúng ta chỉ yêu cầu lớp Paginator, lưu ý code này giả định rằng tập tin này nằm trong cùng một thư mục với tập tin index.php, nếu không bạn nên cập nhật đường dẫn cho phù hợp.

Sau đó, tất cả chúng ta tạo liên kết đến cơ sở tài liệu bằng cách sử dụng thư viện MySQLi, truy xuất những tham số của paginator từ nhu yếu GET và thiết lập truy vấn, vì đây không phải là một bài viết về MySQL hay bất kể một cơ sở tài liệu nào nên tôi sẽ không đi vào cụ thể về liên kết hoặc truy vấn được sử dụng ở đây .
Cuối cùng, tất cả chúng ta tạo ra đối tượng người dùng Paginator và truy xuất hiệu quả cho trang hiện tại .

Hiển thị Kết quả

Bây giờ để hiển thị hiệu quả đã lấy được, hãy thêm code sau vào phần thân của bảng ( table ) .
Ở đây, tất cả chúng ta đơn thuần là lặp qua thuộc tính data của hiệu quả ( results ) chứa những bản ghi thành phố và tạo ra một hàng cho mỗi một trong số chúng .

Các Liên kết Phân trang

Bây giờ để hiển thị các liên kết phân trang hãy thêm code dưới đây vào bên dưới bảng.

Đối với phương pháp createLinks của Paginator tất cả chúng ta truyền tham số link và lớp css có được cho những link phân trang được sử dụng từ bootstrap. Đây là tác dụng trang đã được tạo ra .

Tóm tắt

Bài này hẳn sẽ phân phối cho bạn toàn bộ mọi thứ mà bạn cần phải biết để thao tác với phân trang trong ứng dụng của bạn .
Xin đừng ngại để lại thắc mắc, nhận xét hoặc phản hồi trong phần phản hồi bên dưới nhé !