是否有简单的php分页框架可以轻松实现? [英] Is there any simple pagination framework for php which can be easily implementable?

查看:320
本文介绍了是否有简单的php分页框架可以轻松实现?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的数据库中有几张表,并且希望对页面上的几个表进行分页。
我在每个页面中编写了我自己的分页代码,无论何处需要。
有什么框架工作可以轻松实现,当我传递一个查询到一个方法或类,它必须生成ui与正确的分页。任何机构建议我任何框架工作,这个任务。 p>

编辑:
我已经指定我写了我自己的代码分页,这是非常接近由 @veerendra 但是在60个不同的页面中分页我需要写这个逻辑。
我要求一个框架,减少了编写分页代码的负担,这是动态的,它应该在php不是jquery或javascript。
由于它的逻辑将驻留在客户端无法对大量数据进行操作。

解决方案

以下是文件命名为paging.inc.php



您只需要将该类传递给查询,只需要获取计数,并将count varibale命名为与文件,那么您将需要设置每页的记录和其他参数。



此后,您需要触发查询,该记录将带有文件中的限制变量的记录这可以用于对列表中的列进行排序。

  < 
// CODE FOR PAGING
if(!isset($ num_totrec))$ num_totrec = $ db_recs [0] [tot];

// $ num_totrec应该被通过
如果(!isset($ pg_limit)&& empty($ pg_limit))
$ pg_limit = $ PAGE_LIMIT; // page limit

if(!isset($ rec_limit)&& empty($ rec_limit))
$ rec_limit = $ REC_LIMIT; //记录限制

if($ _ REQUEST [TotalRecords]!=)
$ rec_limit = $ _REQUEST [TotalRecords];

$ num_tmp = 0;
$ var_flg =0;
$ var_limit =;
$ num_limit = 0;
$ var_filter =;

if($ _ GET [start] ==''){$ _GET [start] = 1; $ start = 1;}
if(($ _ GET [start] -1) * $ rec_limit> $ num_totrec)
{
$ _GET [start] = 1;
$ start = 1;
}

if(isset($ tempvar)&!empty($ tempvar))
{
if($ stat == 1&& ; $ tempvar ==true)$ stat = 0;
else if($ stat == 0&& $ tempvar ==true)$ stat = 1;
else $ stat = 1;
}

$ sort_order =($ stat == 1)? $ asc_order:$ desc_order;
$ sort_img =< img src ='$ sort_order'border ='0'>;

$ var_filter =;
$ var_filter =& stat = $ stat;

//列的代码应该排序升序/降序$ END

//更改具有适用变量的代码

if(isset($ ptype ))$ var_filter。=& ptype =。$ ptype。& action = Section;

foreach($ _GET as $ key => $ val)
{
if($ key!=stat&& $ key!=start && $ key!=nstart& $ key!=tempvar&" $ key!=sorton)
{
if(is_array($ val) )
{
for($ k = 0; $ k {
$ var_filter。='&'。$ key。 '[] ='。 $ VAL [$ K];
}
} else if($ key ==keyword){
$ var_filter。=& $ key =。 stripcslashes($ VAL);
}
else
$ var_filter。=& $ key = $ val;
}
}


foreach($ _POST as $ key => $ val)
{
if($ key! stat& $ key!=start& $ key!=nstart&& $ key!=tempvar& $ key!=sorton)
{
if(is_array($ val))
{
for($ k = 0; $ k {
$ var_filter。='&'。$ key。'[] ='。 $ VAL [$ K];
}
} else if($ key ==keyword){
$ var_filter。=& $ key =。 stripcslashes($ VAL);
}
else
$ var_filter。=& $ key = $ val;
}
} // end

if(isset($ month_val)&&$ month_val!=)$ var_filter。=& month_val = $ month_val ;
if(isset($ year_val)&&$ year_val!=)$ var_filter。=& year_val = $ year_val;
if(isset($ action)&& $ action!=)$ var_filter。=& action = $ action;

// SET从这里传递的额外的querystring变量
// $ var_extra可以附加链接为此目的

if(isset($ start) ){
$ num_limit =($ start-1)* $ rec_limit;
$ var_limit =LIMIT $ num_limit,$ rec_limit;
} else $ var_limit =LIMIT 0,$ rec_limit;

if(!isset($ nstart)){
if($ num_totrec){//如果recs存在!
if($ rec_limit> $ num_totrec){
$ num_pgs = 1;
$ var_flg =2;
} else {
$ num_loopctr = 0;
$ num_loopctr = ceil($ num_totrec / $ rec_limit);
if($ pg_limit> $ num_loopctr){
$ num_pgs = $ num_loopctr;
$ var_flg =2;
} else {
$ num_pgs = $ pg_limit;
if($ num_totrec< =($ rec_limit * $ pg_limit))$ var_flg =2;
else $ var_flg =1;
}
}
$ var_link =;
$ var_prevlink =;
//如果排序设置为
$ var_sort_link =;
if(isset($ sorton))$ var_sort_link =& sorton = $ sorton;

$ var_prevlink =< font size = 1 color = black>& nbsp;& nbsp; |; ($ i = 1; $ i $ = $ num_pgs; $ i ++)
{
IF($ i == 1)
$ var_link。=< font size = 1 color = red> $ i< / font>& nbsp; |& nbsp;;
else

$ var_link。=< a href = \$ var_self $ PHP_SELF?nstart = 1& start = $ i $ var_filter $ var_sort_link $ var_extra\> < font size = 1 color = black> $ i< / font>< / a>& nbsp; |& nbsp;;
}
if($ var_flag!=0和$ var_flg!=2){$ var_link。=& nbsp;>& nbsp;< a href = $ var_self $ PHP_SELF?nstart = 2& start = $ i $ var_filter $ var_filter $ var_sort_link $ var_extra\>< font size = 1 color = black> next< / font>< / a>; } else {$ var_link。=< / font>;
}
$ page_link =;
$ page_link =$ var_prevlink $ var_link;
} else {
//如果没有记录的话!
$ var_link =;
}
} else {//如果nstart设置
if($ num_totrec){//如果recs存在!
$ num_loopctr = 0;
$ num_rem_rec = 0;
$ num_rem_rec =($ num_totrec - (($ nstart-1)* $ rec_limit * $ pg_limit));
$ num_loopctr = ceil($ num_rem_rec / $ rec_limit);
$ num_tmp = $ rec_limit * $ nstart * $ pg_limit;
if($ num_tmp> $ num_totrec){
$ num_pgs = $ num_loopctr;
$ var_flg =2;
} else {
$ num_pgs = $ pg_limit;
if($ num_totrec ==($ nstart * $ rec_limit * $ pg_limit))$ var_flg =2;
else $ var_flg =1;
}
$ var_link =;
$ var_prevlink =;
//如果排序设置为
$ var_sort_link =;
if(isset($ sorton))$ var_sort_link =& sorton = $ sorton;
$ num_prevnstart = 0;
$ num_prevstart = 0;
$ num_prevnstart = $ nstart-1;
$ num_prevstart =($ nstart * $ pg_limit) - $ pg_limit;
$ num_tmp =($ num_totrec / $ rec_limit);
if($ nstart< = 1)$ var_prevlink =< font size = 1 color = black>& nbsp; |;
else $ var_prevlink =< a href = \$ var_self $ PHP_SELF?nstart = $ num_prevnstart& start = $ num_prevstart $ var_filter $ var_sort_link $ var_extra\>< font size = 1 color =黑色> prev< / font>< / a>& nbsp;< font size = 1 color = black><& nbsp;< / font>
($ i = 1; $ i <= $ num_pgs; $ i ++)
{
$ num_start = $ num_prevstart + $ i;
$ num_nstart = $ nstart + 1;

IF($ start == $ num_start)
$ var_link。=< font size = 1 color = red> $ num_start< / font>& nbsp; |& nbsp; ;;
else
$ var_link。=< a href = \$ var_self $ PHP_SELF?nstart = $ nstart& start = $ num_start $ var_filter $ var_sort_link $ var_extra\>< font size = 1 color = black> $ num_start< / font>< / a>& nbsp; |& nbsp;;

}
$ num_start ++;
if($ var_flag!=0and $ var_flg!=2){$ var_link。=& nbsp;>< a href = \$ var_self $ PHP_SELF?nstart = $ num_nstart& start = $ num_start $ var_filter $ var_sort_link $ var_extra\>< font size = 1 color = black> next< / font>< / a>< / font> } else {$ var_link。=< font size = 1 color = black>& nbsp;< / font>;
}
$ page_link =;
$ page_link =$ var_prevlink $ var_link;
} else {
//如果没有记录的话!
$ var_link =;
}
}

//如果设置分页变量
if(isset($ nstart))$ var_pgs =& nstart = $ nstart& start = $开始; //附带这个排序链接
// CODE FOR PAGING ENDS OVER HERE
?>

发送下面的示例代码,以便您可以在上述说明中获得我所说的内容。



这只是我使用它的一个示例。

  $ where_arr = array(); 

if($ keyword!=){
$ where_arr [] =$ option like'$关键字%;
}

if(count($ where_arr)> 0)
$ where_clause =WHERE.implode(AND,$ where_arr);
else
$ where_clause ='';


$ table_clause =from admin;

$ sql =select count(iAdminId)as tot$ table_clause。$ where_clause;
$ rs_sql = $ sqlObj-> select($ sql);
$ num_totrec = $ rs_sql [0] ['tot'];

include(gen_pagingmsg.inc.php);

if($ sorton!=)
{
switch($ sorton)
{
case1:
$ sort =vUserName;
if($ stat!= 1)$ sort。=DESC;
break;
case2:
($ stat == 1)? $ sort =vFirstName,vLastName:$ sort =vFirstName desc,vLastName DESC;
break;
case3:
$ sort =vEmail;
if($ stat!= 1)$ sort。=DESC;
break;
case4:
$ sort =dLastAccess;
if($ stat!= 1)$ sort。=DESC;
break;
case5:
$ sort =iTotLogin;
if($ stat!= 1)$ sort。=DESC;
break;
case6:
$ sort =eStatus;
if($ stat!= 1)$ sort。=DESC;
break;
默认值:
$ sort =vUserName;
}
} else {
$ sort =vUserName;
}

$ sql =选择iAdminId,concat(vFirstName,',vLastName)作为vName,vUserName,vEmail,dLastAccess,iTotLogin,eStatus$ table_clause。$ where_clause。 order by。$ sort。$ var_limit;
// echo< br>$ sql;
$ db_sql = $ sqlObj-> select($ sql);

以下是gen_pagingmsg.inc.php

 < ;? 
#========================================= ==========================
#寻呼分页来自此文件。不要删除下面这行。
#========================================= $ // $ b $ echo $ num_totrec;
// ECHO $ rec_limit;
if($ ADMIN_SHOWPAGING_TOP ==N&& $ ADMIN_SHOWPAGING_BOTTOM ==N)
$ rec_limit = $ num_totrec;

include(paging.inc.php);
#========================================= $ //
$ b // $ keyword = stripcslashes($ keyword);

if($ keyword!=)
{
$ var_msg =你的#关键字#的搜索已经找到#num_totrec#matches:;
$ var_msg = str_replace(#keyword#,< font color =#000000> $ keyword< / font>,$ var_msg);
$ var_msg = str_replace(#num_totrec#,< font color =#000000> $ num_totrec< / font>,$ var_msg);
}
if(!isset($ start))
$ start = 1;
$ num_limit =($ start-1)* $ rec_limit;
$ startrec = $ num_limit;
$ lastrec = $ startrec + $ rec_limit;
$ startrec = $ startrec + 1;
if($ lastrec> $ num_totrec)
$ lastrec = $ num_totrec;
if($ num_totrec> 0)
{
$ recmsg =显示$ startrec。 - 。$ lastrec。$ num_totrec;
}
else
{
$ recmsg =对不起...没有找到记录;
}
?>

此文件基本上为您提供了可以保持在列表上方或下方的消息和分页html / p>

I have few tables in my database and want to implement pagination for several tables on the pages. I wrote my own code for pagination in each page wherever it is required. Is there any frame work which can be easily implemented like, when I pass a query to a method or class it has to generate ui with proper pagination.Would any body suggest me any frame work which does this task.

edit: I already specified that I wrote my own code for pagination, it is something very close to the one solution given by @veerendra but for pagination in 60 different pages I need to write that logic. I asked for a framework which reduces my burden of writing the code for pagination which is dynamic and it should be in php not jquery or javascript. As thier logic will reside at client side can't operate on large sets of data.

解决方案

Below is the file named paging.inc.php

You just need to pass the where class to the query and just need to get the count only and name the count varibale same as in the file then you will need to set the records per page and other parameters.

After this you need to fire the query which will bring the records with the limit variable from the file and this can be used for sorting the columns in the listing.

<?
//CODE FOR PAGING 
if(!isset($num_totrec))  $num_totrec = $db_recs[0]["tot"];

   //$num_totrec SHOULD BE PASSED
if(!isset($pg_limit) && empty($pg_limit))
   $pg_limit    = $PAGE_LIMIT; //page limit

if(!isset($rec_limit) && empty($rec_limit))
   $rec_limit   = $REC_LIMIT;  //record limit

if($_REQUEST["TotalRecords"]!="")
    $rec_limit  = $_REQUEST["TotalRecords"];

$num_tmp    = 0;
$var_flg    = "0";
$var_limit  = "";
$num_limit  = 0; 
$var_filter = "";

if($_GET[start]=='')    {$_GET[start] = 1;$start=1;}
if(($_GET[start]-1)*$rec_limit > $num_totrec)
{
    $_GET[start]=1;
    $start=1;
}

if(isset($tempvar) && !empty($tempvar))
{
    if($stat==1 && $tempvar == "true") $stat=0;
    else if($stat==0 && $tempvar == "true") $stat=1;
    else $stat=1;
}

$sort_order = ($stat==1)? $asc_order:$desc_order;
$sort_img = "<img src='$sort_order' border='0'>";

$var_filter = ""; 
$var_filter = "&stat=$stat";

//CODE FOR COLUMN SHOULD SORT ASCENDING/DESCENDING - END

   //CHANGE THIS CODE WITH SUITABLE VARIABLES

    if(isset($ptype)) $var_filter.= "&ptype=".$ptype."&action=Section";

    foreach ($_GET as $key=>$val)
    {
        if($key != "stat" && $key != "start" && $key != "nstart" && $key != "tempvar" && $key != "sorton")
        {
            if(is_array($val))
            {
                for($k=0;$k<count($val);$k++)
                {
                    $var_filter .= '&'.$key.'[]=' . $val[$k];
                }
            }else if($key == "keyword"){
                $var_filter.= "&$key=". stripcslashes($val);
            }
            else
                $var_filter.= "&$key=$val";
        }
    }


    foreach ($_POST as $key=>$val)
    {
        if($key != "stat" && $key != "start" && $key != "nstart" && $key != "tempvar" && $key != "sorton")
        {
            if(is_array($val))
            {
                for($k=0;$k<count($val);$k++)
                {
                    $var_filter .= '&'.$key.'[]=' . $val[$k];
                }
            }else if($key == "keyword"){
                $var_filter.= "&$key=". stripcslashes($val);
            }
            else
                $var_filter.= "&$key=$val";
        }
    }// end

      if(isset($month_val) && $month_val != "") $var_filter.= "&month_val=$month_val";
      if(isset($year_val) && $year_val != "") $var_filter.= "&year_val=$year_val";
      if(isset($action) && $action != "") $var_filter.= "&action=$action";

   //SET Extra querystring variables to pass from here
   //$var_extra can be attached with the links for this purpose

   if(isset($start)){
       $num_limit = ($start-1)*$rec_limit;
       $var_limit = " LIMIT $num_limit,$rec_limit"; 
   }else $var_limit = " LIMIT 0,$rec_limit";

   if(!isset($nstart)){
       if($num_totrec){ //if recs exists!!
           if($rec_limit>$num_totrec){
               $num_pgs = 1;
               $var_flg = "2";
           }else{
               $num_loopctr =0;
               $num_loopctr = ceil($num_totrec/$rec_limit);
               if($pg_limit>$num_loopctr){
                  $num_pgs = $num_loopctr;
                  $var_flg = "2";
               }else{
                  $num_pgs = $pg_limit;
                  if($num_totrec<=($rec_limit*$pg_limit)) $var_flg = "2";
           else $var_flg = "1";
               }
           }
           $var_link = "";
           $var_prevlink ="";
           //if sorting is set
           $var_sort_link="";
           if(isset($sorton)) $var_sort_link = "&sorton=$sorton";

           $var_prevlink ="<font size=1 color=black>&nbsp;&nbsp;|";
           for($i=1;$i<=$num_pgs;$i++)
           {
              IF($i==1)
                $var_link.= "<font size=1 color=red>$i</font>&nbsp;|&nbsp;";
            else

              $var_link.= "<a href=\"$var_self$PHP_SELF?nstart=1&start=$i$var_filter$var_sort_link$var_extra\"><font size=1 color=black>$i</font></a>&nbsp;|&nbsp;";
           }
           if($var_flag !="0" and $var_flg!="2"){ $var_link .= "&nbsp;>&nbsp;<a href=\"$var_self$PHP_SELF?nstart=2&start=$i$var_filter$var_filter$var_sort_link$var_extra\"><font size=1 color=black>next</font></a>"; }else {$var_link .= " </font>";
           }
           $page_link = "";
           $page_link = "$var_prevlink $var_link";
       }else{ 
         //IF NO RECORDS EXISTS!!
         $var_link="";
       }
   }else{ //if nstart is set
       if($num_totrec){ //if recs exists!!
           $num_loopctr =0;
           $num_rem_rec = 0;
           $num_rem_rec = ($num_totrec-(($nstart-1)*$rec_limit*$pg_limit));
           $num_loopctr = ceil($num_rem_rec/$rec_limit);
           $num_tmp = $rec_limit*$nstart*$pg_limit;
           if($num_tmp>$num_totrec){
               $num_pgs = $num_loopctr;
               $var_flg = "2";
           }else{
               $num_pgs = $pg_limit;
               if($num_totrec==($nstart*$rec_limit*$pg_limit)) $var_flg = "2";
               else $var_flg = "1";
           }
           $var_link = "";
           $var_prevlink ="";
           //if sorting is set
           $var_sort_link="";
           if(isset($sorton)) $var_sort_link = "&sorton=$sorton";
           $num_prevnstart = 0;
           $num_prevstart = 0;
           $num_prevnstart = $nstart-1;
           $num_prevstart = ($nstart*$pg_limit)-$pg_limit;
           $num_tmp = ($num_totrec/$rec_limit);
           if($nstart<=1) $var_prevlink ="<font size=1 color=black>&nbsp;|";
           else $var_prevlink ="<a href=\"$var_self$PHP_SELF?nstart=$num_prevnstart&start=$num_prevstart$var_filter$var_sort_link$var_extra\"><font size=1 color=black>prev</font></a>&nbsp;<font size=1 color=black><&nbsp;|</font>";  
           for($i=1;$i<=$num_pgs;$i++)
           {
              $num_start =  $num_prevstart+$i;
              $num_nstart = $nstart+1;

              IF($start==$num_start)
                $var_link.= "<font size=1 color=red>$num_start</font>&nbsp;|&nbsp;";
              else
                 $var_link.= "<a href=\"$var_self$PHP_SELF?nstart=$nstart&start=$num_start$var_filter$var_sort_link$var_extra\"><font size=1 color=black>$num_start</font></a>&nbsp;|&nbsp;";

           }
           $num_start++;
           if($var_flag!="0" and $var_flg!="2"){ $var_link .= "&nbsp;><a href=\"$var_self$PHP_SELF?nstart=$num_nstart&start=$num_start$var_filter$var_sort_link$var_extra\"><font size=1 color=black>next</font></a></font>"; }else {$var_link .= "<font size=1 color=black>&nbsp;</font>";
           }
           $page_link = "";
           $page_link = "$var_prevlink $var_link";
       }else{ 
         //IF NO RECORDS EXISTS!!
         $var_link="";
       }
  }

//if set the paging variables
if(isset($nstart)) $var_pgs = "&nstart=$nstart&start=$start"; //attach this with the sorting links  
//CODE FOR PAGING ENDS OVER HERE
?>

Posting a sample code below so you can get what i said in the above description.

This is just a sample how i use it.

$where_arr = array();

if($keyword !=""){
    $where_arr[] ="$option like '".$keyword."%'";
}

if(count($where_arr)>0)
    $where_clause = " WHERE ".implode(" AND ", $where_arr);
else
    $where_clause = '';


$table_clause = " from admin";

$sql = "select count(iAdminId) as tot ".$table_clause.$where_clause;
$rs_sql = $sqlObj->select($sql);
$num_totrec = $rs_sql[0]['tot'];

include("gen_pagingmsg.inc.php");

if($sorton != "")
{
    switch ($sorton)
    {   
        case "1":
            $sort = "vUserName";
            if($stat!=1) $sort .= " DESC";
            break;
        case "2":
            ($stat==1)? $sort = "vFirstName, vLastName" : $sort = "vFirstName desc, vLastName DESC";
            break;
        case "3":
            $sort = "vEmail";
            if($stat!=1) $sort .= " DESC";
            break;
        case "4":
            $sort = "dLastAccess";
            if($stat!=1) $sort .= " DESC";
            break;
        case "5":
            $sort = "iTotLogin";
            if($stat!=1) $sort .= " DESC";
            break;
        case "6":
            $sort = "eStatus";
            if($stat!=1) $sort .= " DESC";
            break;
        default:
            $sort ="vUserName";
    }
}else {
    $sort ="vUserName";
}

$sql = "select iAdminId, concat(vFirstName, ' ', vLastName) as vName, vUserName, vEmail, dLastAccess, iTotLogin, eStatus ".$table_clause.$where_clause." order by ".$sort.$var_limit;
//echo "<br>".$sql;
$db_sql = $sqlObj->select($sql);

Below is the gen_pagingmsg.inc.php

<?
# =========================================================================
# Paging Paging comes from this File. Don't Remove this below line.
# =========================================================================
//echo $num_totrec;
//ECHO $rec_limit ;
if($ADMIN_SHOWPAGING_TOP=="N" && $ADMIN_SHOWPAGING_BOTTOM=="N")
    $rec_limit=$num_totrec;

include("paging.inc.php");
# =========================================================================

//$keyword = stripcslashes($keyword);

if($keyword!="")
{ 
    $var_msg="Your search for #keyword# has found #num_totrec# matches:";
    $var_msg=str_replace("#keyword#","<font color=#000000>$keyword</font>",$var_msg);
    $var_msg=str_replace("#num_totrec#","<font color=#000000>$num_totrec</font>",$var_msg);
}
if(!isset($start))
    $start = 1;
$num_limit = ($start-1)*$rec_limit;
$startrec = $num_limit;
$lastrec = $startrec + $rec_limit;
$startrec = $startrec + 1;
if($lastrec > $num_totrec)
    $lastrec = $num_totrec;
if($num_totrec > 0 )
{
    $recmsg = "Showing ".$startrec." - ".$lastrec." Records Of ".$num_totrec;
}
else
{
    $recmsg="Sorry !... No Records Found";
}
?>

This file basically provide you the message and paging html which you can keep just above or below your listing

这篇关于是否有简单的php分页框架可以轻松实现?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆