PHP Pagination: Hướng dẫn chi tiết dành cho lập trình viên

Pagination là quá trình chia nhỏ và hiển thị dữ liệu thành các phần/từng trang nhỏ

Trong thế giới lập trình web, việc hiển thị một lượng lớn dữ liệu trên một trang web là một thách thức không nhỏ. Đối với các website có quy mô lớn, như các trang thương mại điện tử, mạng xã hội, hay các dịch vụ tìm kiếm, việc dồn toàn bộ dữ liệu ra một trang không chỉ làm giảm trải nghiệm người dùng mà còn làm website trở nên nặng nề và chậm chạp. Đó là lý do tại sao phân trang (pagination) trở thành một kỹ thuật quan trọng và không thể thiếu. Phân trang cho phép chia nhỏ dữ liệu thành các trang nhỏ hơn, giúp người dùng dễ dàng di chuyển qua từng trang mà không gặp khó khăn. Trong bài viết này, tại phpsolvent chúng ta sẽ tìm hiểu sâu về cách thực hiện PHP Pagination , từ lý thuyết cơ bản đến thực hành chi tiết.

PHP Pagination là gì và tại sao nó quan trọng?

Pagination là quá trình chia nhỏ và hiển thị dữ liệu thành các phần/từng trang nhỏ
Pagination là quá trình chia nhỏ và hiển thị dữ liệu thành các phần/từng trang nhỏ

Khái niệm cơ bản về Pagination

Phân trang hay Pagination là quá trình chia nhỏ và hiển thị dữ liệu thành các phần/từng trang nhỏ trực quan hơn trên một trang web. Ví dụ, một trang web blog có thể có hàng ngàn bài viết, nhưng thay vì hiển thị tất cả các bài viết trên một trang, chúng ta có thể chia nhỏ thành nhiều trang, mỗi trang hiển thị khoảng 10 bài viết.

Tại sao phân trang quan trọng

Phân trang là một phương pháp giúp cải thiện trải nghiệm người dùng và hiệu suất của trang web. Khi hiển thị một số lượng lớn thông tin trên một trang duy nhất, thời gian tải trang có thể rất lâu, dẫn đến trải nghiệm sử dụng không tốt. Thậm chí, các thiết bị có cấu hình yếu sẽ gặp khó khăn trong việc tải và hiển thị toàn bộ nội dung. Phân trang giải quyết vấn đề này bằng cách chỉ tải và hiển thị một phần nhỏ của toàn bộ dữ liệu, làm giảm tải trên máy chủ và trình duyệt của người dùng.

Ứng dụng thực tế của phân trang

Phân trang được sử dụng rộng rãi trong các ứng dụng web như hệ thống quản lý nội dung (CMS), các trang web thương mại điện tử, diễn đàn, mạng xã hội và nhiều hệ thống khác. Ví dụ, trong một trang thương mại điện tử, phân trang được dùng để hiển thị danh sách sản phẩm. Mỗi trang có thể hiển thị 20 sản phẩm, và người dùng có thể dễ dàng di chuyển qua các trang khác để xem toàn bộ danh sách sản phẩm.

Các phương pháp phổ biến để thực hiện phân trang trong PHP

Tính toán số lượng trang dựa trên tổng số dữ liệu

Để thực hiện phân trang, bước đầu tiên là tính toán tổng số lượng trang cần thiết. Điều này được thực hiện bằng cách lấy tổng số bản ghi từ cơ sở dữ liệu và chia cho số lượng bản ghi muốn hiển thị trên mỗi trang. Công thức cơ bản là:

“`php

$total_records = /* Tổng số bản ghi từ CSDL */;

$limit = 10; // Số bản ghi mỗi trang

$total_pages = ceil($total_records / $limit);

“`

Ví dụ, nếu có 150 sản phẩm trong cơ sở dữ liệu và mỗi trang hiển thị 10 sản phẩm, tổng số trang sẽ là 15.

Thiết lập giá trị offset và limit

Trong SQL, để lấy một tập hợp cụ thể của bản ghi, ta sử dụng các từ khóa `LIMIT` và `OFFSET`. `LIMIT` chỉ định số lượng bản ghi cần lấy, trong khi `OFFSET` xác định bản ghi bắt đầu từ đâu. Đối với trang đầu tiên, OFFSET sẽ là 0, trang thứ hai OFFSET sẽ là 10, và cứ thế tiếp tục.

“`php

$page = isset($_GET[‘page’]) ? $_GET[‘page’] : 1; // Trang hiện tại, mặc định là 1

$offset = ($page – 1) * $limit;

$query = “SELECT * FROM products LIMIT $limit OFFSET $offset”;

“`

Sử dụng Frameworks và Thư viện

Nhiều framework PHP như Laravel, Symfony hay các thư viện như Pagerfanta cung cấp các tính năng hỗ trợ phân trang rất mạnh mẽ và đơn giản hóa quy trình này. Sử dụng các công cụ này giúp giảm đi rất nhiều code phức tạp mà vẫn đạt được kết quả mong muốn.

Cách thiết lập cơ sở dữ liệu cho phân trang PHP

Cơ sở dữ liệu nên được thiết kế hợp lý để hỗ trợ việc phân trang một cách hiệu quả
Cơ sở dữ liệu nên được thiết kế hợp lý để hỗ trợ việc phân trang một cách hiệu quả

Thiết kế cấu trúc cơ sở dữ liệu

Cơ sở dữ liệu nên được thiết kế hợp lý để hỗ trợ việc phân trang một cách hiệu quả. Một bảng đơn giản có thể chứa các cột cơ bản như id, tên sản phẩm, mô tả, giá cả… Dữ liệu cần được chuẩn hoá để tối ưu hoá truy vấn.

“`sql

CREATE TABLE products (

id INT AUTO_INCREMENT PRIMARY KEY,

name VARCHAR(255) NOT NULL,

description TEXT,

price DECIMAL(10,2),

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);

“`

Chỉ mục và tối ưu hoá truy vấn

Việc sử dụng chỉ mục (index) và tối ưu hoá truy vấn là yếu tố quan trọng để cải thiện tốc độ phân trang. Thiết lập các chỉ mục trên cột thường xuyên được truy vấn giúp tăng tốc độ tìm kiếm và truy vấn dữ liệu.

“`sql

CREATE INDEX idx_product_name ON products(name);

“`

Lấy tổng số lượng bản ghi

Trước khi thực hiện phân trang, cần lấy tổng số lượng bản ghi trong bảng để tính toán số trang cần thiết. Điều này thường được thực hiện bằng một truy vấn SELECT đơn giản.

“`php

$total_records_query = “SELECT COUNT(*) FROM products”;

$result = mysqli_query($conn, $total_records_query);

$total_records = mysqli_fetch_array($result)[0];

“`

Tạo hàm phân trang cơ bản trong PHP

Hàm lấy dữ liệu

Chúng ta sẽ bắt đầu bằng cách tạo một hàm để lấy dữ liệu từ cơ sở dữ liệu với các tham số `limit` và `offset`. Hàm này sẽ trả về một mảng dữ liệu từ bảng products.

“`php

function getProducts($limit, $offset) {

global $conn;

$query = “SELECT * FROM products LIMIT $limit OFFSET $offset”;

$result = mysqli_query($conn, $query);

$products = [];

if ($result) {

while ($row = mysqli_fetch_assoc($result)) {

$products[] = $row;

}

}

return $products;

}

“`

Hàm hiển thị liên kết phân trang

Hàm này sinh ra các liên kết phân trang (pagination links) dựa trên tổng số trang và trang hiện tại. Nó sẽ giúp người dùng có thể dễ dàng di chuyển giữa các trang khác nhau.

“`php

function renderPagination($total_pages, $current_page) {

echo ‘

‘;

echo ‘

  • $i

‘;

echo ‘

‘;

}

“`

Hiển thị liên kết phân trang động trên trang web

Kết hợp các phần trước để tạo ra một trang web phân trang hoàn chỉnh
Kết hợp các phần trước để tạo ra một trang web phân trang hoàn chỉnh

Đưa tất cả vào cùng nhau

Chúng ta sẽ kết hợp các phần trước để tạo ra một trang web phân trang hoàn chỉnh. Đầu tiên, hãy đảm bảo rằng bạn đã kết nối đến cơ sở dữ liệu và thiết lập cấu trúc cơ bản cho trang.

“`php

$current_page = isset($_GET[‘page’]) ? (int)$_GET[‘page’] : 1;

$limit = 10;

$offset = ($current_page – 1) * $limit;

$total_records_query = “SELECT COUNT(*) FROM products”;

$result = mysqli_query($conn, $total_records_query);

$total_records = mysqli_fetch_array($result)[0];

$total_pages = ceil($total_records / $limit);

$products = getProducts($limit, $offset);

“`

Hiển thị dữ liệu trên trang

Bây giờ, chúng ta sẽ hiển thị dữ liệu sản phẩm lấy từ cơ sở dữ liệu và các liên kết phân trang bên dưới.

“`php

foreach ($products as $product) {

echo “

“;

echo “

{$product[‘name’]}

“;

echo “

{$product[‘description’]}

“;

echo “

Giá: {$product[‘price’]}

“;

echo “

“;

}

renderPagination($total_pages, $current_page);

“`

Kết quả cuối cùng là một trang web với dữ liệu sản phẩm được hiển thị theo từng trang, kèm theo các liên kết phân trang động cho phép người dùng di chuyển giữa các trang khác nhau.

Kết luận

Thông qua bài viết này, chúng ta đã đi qua toàn bộ quá trình thực hiện phân trang trong PHP, từ lý thuyết cơ bản, thiết lập cơ sở dữ liệu, đến việc tạo hàm và hiển thị dữ liệu trên trang web. Phân trang không chỉ là một yếu tố cải thiện trải nghiệm người dùng mà còn giúp tối ưu hóa hiệu suất của website. Hy vọng rằng với những kiến thức và ví dụ cụ thể trong bài viết, các bạn sẽ có thể tự tin thực hiện phân trang trong các dự án PHP của mình.