【问题标题】:PHP pagination functionPHP分页功能
【发布时间】:2022-05-07 00:06:10
【问题描述】:
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

我怎样才能获得上述功能的下一个和上一个链接。

【问题讨论】:

  • 与本主题无关,但您应该将代码调整为$start = ($page-1)*$limit+1;

标签: php pagination


【解决方案1】:

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

希望他们工作。

尝试以下方法:

<?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;

 }
 ?>

【讨论】:

    【解决方案2】:

    我在我的控制器中使用这个分页类,如下所示 案例'':

        $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;
    
    }
    

    【讨论】:

      【解决方案3】:

      这应该包含下一个和上一个链接,当前页面两侧最多有 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;
           }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-18
        • 1970-01-01
        相关资源
        最近更新 更多