PHP MVC CĂN BẢN
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

[Module User] - Viết hàm phân trang

Để hiển thị danh sách người dùng thì chúng ta phải sử dụng thuật toán phân trang để giới hạn danh sách hiển thị, vì vậy nếu bạn chưa biết về thuật toán đó thì hãy quay lại bài đó để xem nhé, mình có quay video kèm theo nên rất dễ hiểu. Sau khi bạn xem xong và hiểu toàn bộ nội dung của thuật toán thì ta có thể bắt đầu bài học thứ 10 của series này.

1. Viết hàm phân trang

Trong một trang web có rất nhiều chức năng liên quan đến hiển thị danh sách như chức năng danh sách người dùng, chức năng danh sách tin tức, ... Tất cả các chức năng đó đều phải sử dụng thuật toán phân trang, vì vậy để tiện sử dụng thì chúng ta nên viết một hàm dùng chung cho toàn bộ hệ thống.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Bạn mở file libs/helper.php lên và chúng ta sẽ thêm một số hàm trong đó.

Hàm bổ trợ:

Trước tiên ta cần viết một hàm bổ trợ có tên là create_link, hàm này sẽ nhận hai tham số là $url$filter như sau:

 

// Tạo chuỗi query string
function create_link($uri, $filter = array()){
    $string = '';
    foreach ($filter as $key => $val){
        if ($val != ''){
            $string .= "&{$key}={$val}";
        }
    }
    return $uri . ($string ? '?'.ltrim($string, '&') : '');
}

 

Trong đó tham số:

  • $url là full đường dẫn đến thư mục của admin, ví dụ http://localhost/php_example/admin.
  • $filter là một mảng gồm các cặp key và value của chuỗi query string.

Ví dụ:

 

echo create_link(base_url('admin'), array('m' => 'user', 'a' => 'list'));

 

Đoạn code này sẽ in ra màn hình dòng http://localhost/php_example/admin/?&m=user&a=list.

Hàm phân trang:

Bạn thêm hàm phân trang paging với nội dung như sau:

 

// Hàm phân trang
function paging($link, $total_records, $current_page, $limit)
{    
    // Tính tổng số trang
    $total_page = ceil($total_records / $limit);
    
    // Giới hạn current_page trong khoảng 1 đến total_page
    if ($current_page > $total_page){
        $current_page = $total_page;
    }
    else if ($current_page < 1){
        $current_page = 1;
    }
    
    // Tìm Start
    $start = ($current_page - 1) * $limit;

    $html = '';
    
    // nếu current_page > 1 và total_page > 1 mới hiển thị nút prev
    if ($current_page > 1 && $total_page > 1){
        $html .= '<a href="'.str_replace('{page}', $current_page-1, $link).'">Prev</a>';
    }

    // Lặp khoảng giữa
    for ($i = 1; $i <= $total_page; $i++){
        // Nếu là trang hiện tại thì hiển thị thẻ span
        // ngược lại hiển thị thẻ a
        if ($i == $current_page){
            $html .= '<span>'.$i.'</span>';
        }
        else{
            $html .= '<a href="'.str_replace('{page}', $i, $link).'">'.$i.'</a>';
        }
    }

    // nếu current_page < $total_page và total_page > 1 mới hiển thị nút prev
    if ($current_page < $total_page && $total_page > 1){
        $html .= '<a href="'.str_replace('{page}', $current_page+1, $link).'">Next</a>';
    }
    
    // Trả kết quả
    return array(
        'start' => $start,
        'limit' => $limit,
        'html' => $html
    );
}

 

Nội dung bên trong của hàm này chính là thuật toán phân trang mà bạn đã học. Tuy nhiên về các tham số truyền vào thì bạn cần chú ý như sau:

  • $link: là đường dẫn full của trang hiển thị danh sách co đính kèm tham số page={page}. Bắt buộc kèm theo tham số page={page} bởi lúc hiển thị URL cho các nút phân trang nó sẽ replace tham số này thành các con số tương ứng.
  • $total_records: Tổng số records trong CSDL
  • $current_page: Trang hiện tại
  • $limit: Giới hạn bao nhiêu records trên một trang

Kể quả hàm này sẽ trả về một mảng gồm ba tham số:

  • start: Vị trí records đầu tiên trong danh sách kết quả truy vấn
  • limit: Số records muốn lấy trên một trang
  • html: Nội dung html phân trang

Cách sử dụng:

Lưu ý quan trọng nhất là tham số $link bởi nó hơi rườm rà.

 

$link = create_link(base_url('admin'), array(
    'm' => 'user',
    'a' => 'list',
    'page' => '{page}',
    'username' => $filter['username']
));

// Thực hiện phân trang
$paging = paging($link, 1000, 2, 10);

 

Như vậy chúng ta đã sử dụng hàm bổ trợ để tạo link và lúc tạo link bắt buộc phải có tham số page={page}.

2. Lời kết

Bài này chủ yếu mình hướng dẫn cách viết một hàm phân trang để dùng chung cho toàn bộ hệ thống admin của website. Trong bài mình không đề cập đến thuật toán phân trang vì mình đã có một bài hướng dẫn rất chi tiết rồi, vì vậy nếu bạn chưa biết thì hãy đến bài đó để tham khảo.

Bài tiếp theo chúng ta sẽ viết chức năng hiển thị danh sách người dùng.

Cùng chuyên mục:

Hàm key_exists() trong PHP

Hàm key_exists() trong PHP

Cách sử dụng key_exists() trong PHP

Hàm mysqli_fetch_row() trong PHP

Hàm mysqli_fetch_row() trong PHP

Cách sử dụng mysqli_fetch_row() trong PHP

Hàm end() trong PHP

Hàm end() trong PHP

Cách sử dụng end() trong PHP

Hàm mysqli_field_count() trong PHP

Hàm mysqli_field_count() trong PHP

Cách sử dụng mysqli_field_count() trong PHP

Hàm count() trong PHP

Hàm count() trong PHP

Cách sử dụng count() trong PHP

Hàm mysqli_field_seek() trong PHP

Hàm mysqli_field_seek() trong PHP

Cách sử dụng mysqli_field_seek() trong PHP

Hàm compact() trong PHP

Hàm compact() trong PHP

Cách sử dụng compact() trong PHP

Hàm mysqli_field_tell() trong PHP

Hàm mysqli_field_tell() trong PHP

Cách sử dụng mysqli_field_tell() trong PHP

Hàm array_values() trong PHP

Hàm array_values() trong PHP

Cách sử dụng array_values() trong PHP

Hàm mysqli_free_result() trong PHP

Hàm mysqli_free_result() trong PHP

Cách sử dụng mysqli_free_result() trong PHP

Hàm array_unshift() trong PHP

Hàm array_unshift() trong PHP

Cách sử dụng array_unshift() trong PHP

Hàm mysqli_get_charset() trong PHP

Hàm mysqli_get_charset() trong PHP

Cách sử dụng mysqli_get_charset() trong PHP

Hàm array_shift() trong PHP

Hàm array_shift() trong PHP

Cách sử dụng array_shift() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Cách sử dụng mysqli_get_client_stats() trong PHP

Hàm array_unique() trong PHP

Hàm array_unique() trong PHP

Cách sử dụng array_unique() trong PHP

Hàm mysqli_get_client_version() trong PHP

Hàm mysqli_get_client_version() trong PHP

Cách sử dụng mysqli_get_client_version() trong PHP

Hàm array_uintesect() trong PHP

Hàm array_uintesect() trong PHP

Cách sử dụng array_uintesect() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Cách sử dụng mysqli_get_connection_stats() trong PHP

Hàm array_sum() trong PHP

Hàm array_sum() trong PHP

Cách sử dụng array_sum() trong PHP

Hàm mysqli_get_host_info() trong PHP

Hàm mysqli_get_host_info() trong PHP

Cách sử dụng mysqli_get_host_info() trong PHP

Top