Thứ Hai, 5 tháng 8, 2013
Thuật toán Phân trang PHP
Điều kiện trước khi đọc bài viết: 1. Bạn phải biết
cách kết nối vào DB. 2. Bạn đã tạo sẵn 1 table và table này có chứa nhiều
thông tin để chờ... phân trang
Bạn tạo file list.php (Hay tạo file nào đó
cũng được) có code hoàn chỉnh như sau:
CODE
$page = isset ( $_GET["page"] ) ? intval (
$_GET["page"] ) : 1;
$rows_per_page = 20;
$page_start = ( $page - 1 ) * $rows_per_page;
$page_end = $page * $rows_per_page;
$sql_query = mysql_query("SELECT * FROM
table_name");
$number_of_page = ceil ( mysql_num_rows( $sql_query
) / $rows_per_page );
if ( $number_of_page > 1 )
{
$list_page = " Trang: ";
for ( $i = 1; $i <= $number_of_page; $i++ )
{
if ( $i == $page )
{
$list_page .= " [ {$i} ] ";
}
else
{
$list_page .= " {$i} ";
}
}
}
$i = 0;
while ( $result = mysql_fetch_array ( $sql_query ) )
{
if ( $i >= $page_start )
{
print "";
}
$i++;
if ($i >= $page_end)
{
break;
}
}
print <<
{$list_page}
EOF;
?>
Giải thích từng đoạn:
1. Cú pháp của đoạn này là:
Page = kiểm tra xem biến page có tồn tại hay không
[?]
nếu tồn tại thì lấy giá trị của biến này và dùng hàm
intval lọc dể nhận được giá trị an toàn [:]
còn nếu không thì sẽ có giá trị mặc định là 1
$page = isset ( $_GET["page"] ) ? intval (
$_GET["page"] ) : 1;
2. Số dòng trên 1 trang
$rows_per_page = 20;
3. Tính số dòng ở trang mở đầu dựa theo biến $page
$page_start = ( $page - 1 ) * $rows_per_page;
4. Tính số dòng ở trang cuối dựa theo biến $page
$page_end = $page * $rows_per_page;
Ví dụ về trang mở đầu và trang cuối theo công thức
trên:
Giả sử trang đang xem hiện giờ là 1, ta đc:
$page_start = (1 - 1) * 20 = 0
Còn $page_end = 1 * 20 = 20, vậy ta có giá trị 0 là
mở đầu và 20 là kết thúc
5. Truy xuất vào table_name
$sql_query = mysql_query("SELECT * FROM
table_name");
6. Tính toán số trang, cách làm như sau:
"mysql_num_rows( $sql_query )" là lấy tổng
số dòng của table đã truy xuất [1]
"$rows_per_page" là bằng 20 (giá trị mà ta
đặt ở trên) [2]
Lấy [1] chia cho [2] ta sẽ ra được số trang
Để làm tròn các giá trị từ (x.1 -> x.9 thành 1+x)
ta dùng hàm ceil()
CODE
$number_of_page = ceil ( mysql_num_rows( $sql_query
) / $rows_per_page );
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
7. Nếu số trang lớn hơn 1 thì sẽ tiến hành liệt kê
các trang
CODE
if ( $number_of_page > 1 )
{
$list_page = " Trang: ";
// Tiến hành in từng trang
for ( $i = 1; $i <= $number_of_page; $i++ )
{
// Nếu $i bằng $page hiện giờ sẽ in đậm để nhận biết
đang xem trang nào
if ( $i == $page )
{
$list_page .= " [ {$i} ] ";
}
// Ngược lại...
else
{
$list_page .= " {$i} ";
}
}
}
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
8. Đặt biến $i bằng 0
$i = 0;
9. Liệt kê tất cả các dòng trong 1 table
CODE
while ( $result = mysql_fetch_array ( $sql_query ) )
{
// Nếu như số dòng liệt kê lớn hơn hoặc bằng
$page_start thì sẽ in tiếp tục
if ( $i >= $page_start )
{
print $result[noidung]; // Với field noidung là do
bạn đặt, ở đây L chỉ ví dụ
}
// Gia tăng giá trị $i theo từng dòng
// Lúc đầu ta đặt biến $i là 0, vậy nếu có 4 dòng
thì biến $i sẽ gia tăng cho đến khi bằng 4
$i++;
// Nếu như số dòng đang liệt kê lớn hơn $page_end
thì sẽ kết thúc vòng lặp bằng "break"
if ($i >= $page_end)
{
break;
}
}
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
10. Ở trên ta đã nạp nội dung cho biến $list_page,
bây giờ thì in nó ra: (Design what to do )
CODE
print <<
{$list_page}
EOF;
|
|
Xem thêm tại: http://daotaolaptrinh.edu.vn/phan-trang-php-hoan-chinh |
Bài đăng phổ biến
-
Mới nhất hay nhất. Hướng dẫn PHP và SQL toàn tập cơ bản đến nâng cao . Sau bao ngày rong chơi trên mạng. Mình đã sưu tầm được mấy cuốn tài l...
-
Những kiến thức được hướng dẫn trong DVD Phần căn bản các bạn sẽ được làm quen với câu lệnh, cú pháp của PHP bắt đầu bằng việc tạo biến, tạo...
0 nhận xét:
Đăng nhận xét