0
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模式实现的分页功能。但是这个功能没有显示下一个和上一个链接。

我需要返回 HTML 变量以使用上一个和下一个到控制器的链接进行分页。

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

$limit,$numRows,$page

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

4

3 回答 3

0

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

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

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

     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;
     }
于 2014-01-09T23:11:23.543 回答
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;

}
于 2013-10-02T15:45:43.823 回答
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;

 }
 ?>
于 2013-10-01T17:05:13.530 回答