Phân trang như thế nào?

$p=5; //so bang ghi trong 1 trang can hien thi
//-------Ham tinh so trang-------------------------
function num_page()
{
global $n_record;
//lấy biến toàn cục
global $p;
if($n_record%$p==0)
{
//nếu số record = số trang ($p) thì trả vế số trang là 1
$n_page=$n_record/$p; //1
return $n_page;
}
else
{
//số record nhiều hơn số trang: số trang = (số record - số record lẻ ở trang cuối) chia cho (số record trên 1 trang) + 1
$n_page=($n_record-($n_record%$p))/$p+1;
return $n_page;
}
}
//-------------------------------------------------


Có tổng số trang rồi, ta dùng vòng lặp để lấy từng trang gán vào url (page.php?trang=?)

for($i=1; $i< number_page ( ), $i++)
echo "<.a href="page.php?trang=".$i."'">".$i." ";


Lấy giá trị "trang" trên trình duyệt $n = $HTTP_GET_VARS['trang'] hoặc dùng $_GET['trang'] cho version mới của PHP.

Lấy vị trí của record bắt đầu cho trang mới: $vitri = ($n -1)/$p;
Ví dụ: $p =5, $n=3
$vitri = (3-1)*5 = 10 // Tại record thứ 10 sẽ bắt đầu trang 3
Câu hỏi: Tại sao vị trí thứ 10 là trang 3 mà ko phải trang 2?
Xem tiếp sẽ biết câu trả lời hì hì

Bây giờ ta đã có [vị trí record bắt đầu trang] và [số record trên 1 trang]
Để lấy số record cho trang, ta dùng lệnh SQL sau
SELECT ... FROM ... LIMIT $vitri, $p

Cu phap: LIMIT x, y

x là record bắt đầu, y là số record kết thúc hoặc số record cần lây
Lưu ý: record bắt đầu là 0, do đó câu hỏi trên đã có đáp án! ^_^

Hình dưới đây trình bày phân trang dùng dropdownlist:


Tham khảo thêm tại: http://ddth.com/showthread.php?t=92511

Happy coding! ^_^

Comments