PHP分页功能

时间:2013-10-01 16:55:14

标签: php pagination

public function paging($limit,$numRows,$page){

    $allPages       = ceil($numRows / $limit);

    $start          = ($page - 1) * $limit;

    $querystring = "";

    foreach ($_GET as $key => $value) {
        if ($key != "page") $paginHTML .= "$key=$value&";
    }

    $paginHTML = "";

    $paginHTML .= "Pages: ";

    for ($i = 1; $i <= $allPages; $i++) {
        $paginHTML .= "<a " . ($i == $page ? "class=\"selected\" " : "");
        $paginHTML .= "href=\"?{$querystring}page=$i";
        $paginHTML .= "\">$i</a> ";
    }

    return $paginHTML;

 }

这是我对MVC模式实现的分页功能。但是这个函数没有显示next和prev链接。

我需要返回HTML变量,以便分配前一个和下一个链接到控制器。

我从控制器将这些变量传递给了这个函数。

$limit,$numRows,$page

如何获得上述功能的下一个和上一个链接。

3 个答案:

答案 0 :(得分:0)

我在循环中添加了一些条件。

希望他们能够工作。

尝试以下方法:

<?php
public function paging($limit,$numRows,$page){

    $allPages       = ceil($numRows / $limit);

    $start          = ($page - 1) * $limit;

    $querystring = "";

    foreach ($_GET as $key => $value) {
        if ($key != "page") $paginHTML .= "$key=$value&amp;";
    }

    $paginHTML = "";

    $paginHTML .= "Pages: ";

    for ($i = 1; $i <= $allPages; $i++) {
        if ($i>1) {
                    $prev = $i-1;
                    $paginHTML .= '<a href="?'.$querystring.'page='.$prev'">Previous</a>';
                }
                $paginHTML .= "<a " . ($i == $page ? "class=\"selected\" " : "");
        $paginHTML .= "href=\"?{$querystring}page=$i";
        $paginHTML .= "\">$i</a> ";
                if ($i<$allPages) {
                    $next = $i+1;
                    $paginHTML .= '<a href="?'.$querystring.'page='.$next'">Next</a>';
                }
    }

    return $paginHTML;

 }
 ?>

答案 1 :(得分:0)

我正在我的控制器中使用这个分页类     案例'':

    $page = isset ( $_REQUEST ['page'] ) ? $_REQUEST ['page'] : 1;

    $limit          = 5;

    $allStudent     = $student->getAllStudents();

    $numRows        = count($allStudent);

    $start          = ($page - 1) * $limit;

    $students       = $student->getStudentsWithLimit($start,$limit);

    $paginHTML      = $pagin->paging($limit,$numRows,$page);


    $view->render('view/allStudent.php', array('allStudent' => $students,'pagin' => $paginHTML ));

    break;

在Model类中获取记录功能

public function getStudentsWithLimit($start,$limit){

    $stmt       = $this->db->con->query("SELECT * FROM student LIMIT $start, $limit");
    $results    = $stmt->fetchAll(PDO::FETCH_ASSOC);

    return $results;

}

答案 2 :(得分:0)

这应该包含当前页面任一侧的下一个和上一个链接,最多5个。

如果您希望链接格式不同,请传入函数。

我只是给了这个非常有限的测试,并且已经从一个类中拉出来了,所以你可以用这个引用的参数替换这里的一些硬编码值

     function get_paging_links($result_count, callable $format_function=null)
     {
         if(!$format_function){
             $format_function = function($url,$page,$qs){
                 $qs['page'] = $page;
                 return $url.'?'.http_build_query($qs);
             };
         }

        $per_page = 5;
        $total_pages = ceil($result_count / $per_page);
        $return = [];


        parse_str($_SERVER['QUERY_STRING'],$qs);

        $url = $_SERVER['REQUEST_URI'];

        //Remove existing query_string.
        if($pos = strpos($url,'?')){
            $url = substr($url,0,$pos);
        }

        $current_page = isset($qs['page']) ? $qs['page'] : 1;

        $previous = $current_page -1;

        if ($previous) {
            $return['previous'] = $format_function($url,$previous,$qs);
        }

        for($i = max(1,$current_page-5); $i <= min($total_pages,$current_page+5); $i++) {
            $return["$i"] = $format_function($url,$i,$qs);
        }

        $next_page = $current_page + 1;

        if ($next_page < $total_pages){
            $return['next'] = $format_function($url,$next_page,$qs);
        }

        return $return;
     }