Sinh nhật : 03/09/1989
Tổng số bài gửi : 953
Điểm tích lũy : 1826
Ngày gia nhập : 02/03/2011
Tuổi : 34
Đến từ : TP Trà Vinh
Hướng Dẫn Phân Trang Bằng PHP
| | |
| Code đầy đủ <?php
$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 = " <td> Trang: </td>";
for ( $i = 1; $i <= $number_of_page; $i++ ) { if ( $i == $page ) { $list_page .= " <td>[ <b>{$i}</b> ]</td> "; } else { $list_page .= "<td><a href='list.php?page={$i}'> {$i} </a></td>"; } } }
$i = 0;
while ( $result = mysql_fetch_array ( $sql_query ) ) { if ( $i >= $page_start ) { print ""; }
$i++;
if ($i >= $page_end) { break; } }
print <<<EOF <table cellspacing="0" cellpadding="0" border="0"> <tr> {$list_page} </tr> </table> 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() $number_of_page = ceil ( mysql_num_rows( $sql_query ) / $rows_per_page );
7. Nếu số trang lớn hơn 1 thì sẽ tiến hành liệt kê các trang if ( $number_of_page > 1 ) { $list_page = " <td> Trang: </td>"; // 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 .= " <td>[ <b>{$i}</b> ]</td> "; } // Ngược lại... else { $list_page .= "<td><a href='list.php?page={$i}'> {$i} </a></td>"; } } }
8. Đặt biến $i bằng 0 $i = 0;
9. Liệt kê tất cả các dòng trong 1 table 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; } }
10. Ở trên ta đã nạp nội dung cho biến $list_page, bây giờ thì in nó ra: print <<<EOF <table cellspacing="0" cellpadding="0" border="0"> <tr> {$list_page} </tr> </table> EOF;
Chúc các bạn thành công! | |
| | |