Maison  >  Article  >  développement back-end  >  Analyse des méthodes d'affichage des paginations PHP (avec classe de pagination générale PHP)

Analyse des méthodes d'affichage des paginations PHP (avec classe de pagination générale PHP)

不言
不言original
2018-06-01 13:50:321255parcourir

Cet article présente principalement la méthode d'affichage de la pagination PHP. Il analyse les requêtes et le contenu de la base de données PHP combinés à l'affichage de la pagination HTML sous forme d'exemples. Il est également livré avec une classe de pagination générale PHP pour votre référence. Pour référence,

L'exemple de cet article décrit la méthode d'affichage de la pagination en PHP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

<?php
header("content-type:text/html;charset=utf-8");
$currentpage = 1;
if(isset($_GET[&#39;page&#39;]))
  $currentpage = $_GET[&#39;page&#39;];
//连接数据库
$link = mysql_connect("localhost","root","") or die(&#39;连接失败&#39;);
mysql_select_db(&#39;myschool&#39;);
mysql_query(&#39;set names utf8&#39;);
$sql ="SELECT count(*) as &#39;count&#39; from student";//查询记录的sql语句
$result = mysql_query($sql);
$arr = mysql_fetch_array($result);
$count = $arr[&#39;count&#39;];
$pagesize = 3;
$pages = ceil($count/$pagesize);//共多少页
$prepage = $currentpage -1;
if($prepage<=0)
  $prepage=1;
$nextpage = $currentpage+1;
if($nextpage >= $pages){
 $nextpage = $pages;
}
$start =($currentpage-1) * $pagesize;//起始位置
$sql = "SELECT * from student limit $start,$pagesize";
echo $sql;
// $sql = "select * from student";
$result = mysql_query($sql);
?>
<!-- html部分 -->
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
<body>
<table border="1">
 <tr>
 <td>学号</td>
 <td>姓名</td>
 <td>性别</td>
 <td>年龄</td>
 </tr>
<?php while($arr=mysql_fetch_array($result)){ ?>
 <td><?php echo $arr[&#39;number&#39;]; ?></td>
 <td><?php echo $arr[&#39;name&#39;]; ?></td>
 <td><?php echo $arr[&#39;sex&#39;]; ?></td>
 <td><?php echo $arr[&#39;age&#39;]; ?></td>
 </tr>
<?php } ?>
 </table>
 <a href="<?php echo $_SERVER[&#39;PHP_SELF&#39;].&#39;?page=&#39;.$prepage; ?>" rel="external nofollow" >上一页</a>  <a href="<?php echo $_SERVER[&#39;PHP_SELF&#39;].&#39;?page=&#39;.$nextpage; ?>" rel="external nofollow" >下一页</a>
</body>
</html>

Remarque : Quand il existe deux types de php et html dans un fichier, le fichier php doit avoir une balise de fin

Pièce jointe : classe de pagination générale php et utilisation :

Page.class Fichier .php :

<?php
/**
 * 分页类
 *
 * 调用方式:
 * $p=new Page(总条数,显示页数,当前页码,每页显示条数,[链接]);
 * print_r($p->getPages()); //生成一个页码数组(键为页码,值为链接)
 * echo $p->showPages(1);  //生成一个页码样式(可添加自定义样式)
 *
 */
/*
总条数,需要显示的页数,当前页,每页显示的条数,连接
生成一个一维数组,键为页码 值为连接
返回一个生成好样式的页码(并且可以根据自己需要添加样式)
默认样式 共45条记录,每页显示10条,当前第1/4页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]
*/
class Page{
  protected $count;    //总条数
  protected $showPages;  //需要显示的页数
  protected $countPages; //总页数
  protected $currPage;  //当前页
  protected $subPages;  //每页显示条数
  protected $href;    //连接
  protected $page_arr=array();  //保存生成的页码 键页码 值为连接
  /**
   * __construct 构造函数(获取分页所需参数)
   * @param int $count   总条数
   * @param int $showPages 显示页数
   * @param int $currPage 当前页数
   * @param int $subPages 每页显示数量
   * @param string $href  连接(不设置则获取当前URL)
   */
  public function __construct($count,$showPages,$currPage,$subPages,$href=&#39;&#39;){
    $this->count=$count;
    $this->showPages=$showPages;
    $this->currPage=$currPage;
    $this->subPages=$subPages;
    //如果链接没有设置则获取当前连接
    if(empty($href)){
      $this->href=htmlentities($_SERVER[&#39;PHP_SELF&#39;]);
    }else{
      $this->href=$href;
    }
    $this->construct_Pages();
  }
  /**
   * getPages 返回页码数组
   * @return array 一维数组 键为页码 值为链接
   */
  public function getPages(){
    return $this->page_arr;
  }
  /**
   * showPages 返回生成好的页码
   * @param int $style 样式
   * @return string   生成好的页码
   */
  public function showPages($style=1){
    $func=&#39;pageStyle&#39;.$style;
    return $this->$func();
  }
  /**
   * pageStyle1 分页样式(可参照这个添加自定义样式 例如pageStyle2())
   * 样式 共45条记录,每页显示10条,当前第1/4页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]
   * @return string
   */
  protected function pageStyle1(){
    /* 构造普通模式的分页
    共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]
    */
    $pageStr=&#39;共&#39;.$this->count.&#39;条记录,每页显示&#39;.$this->subPages.&#39;条&#39;;
    $pageStr.=&#39;当前第&#39;.$this->currPage.&#39;/&#39;.$this->countPages.&#39;页 &#39;;
    $_GET[&#39;page&#39;] = 1;
    $pageStr.=&#39;<span>[<a href="&#39;.$this->href.&#39;?&#39;.http_build_query($_GET).&#39;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >首页</a>] </span>&#39;;
    //如果当前页不是第一页就显示上页
    if($this->currPage>1){
      $_GET[&#39;page&#39;] = $this->currPage-1;
      $pageStr.=&#39;<span>[<a href="&#39;.$this->href.&#39;?&#39;.http_build_query($_GET).&#39;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >上页</a>] </span>&#39;;
    }
    foreach ($this->page_arr as $k => $v) {
      $_GET[&#39;page&#39;] = $k;
      $pageStr.=&#39;<span>[<a href="&#39;.$v.&#39;" rel="external nofollow" >&#39;.$k.&#39;</a>] </span>&#39;;
    }
    //如果当前页小于总页数就显示下一页
    if($this->currPage<$this->countPages){
      $_GET[&#39;page&#39;] = $this->currPage+1;
      $pageStr.=&#39;<span>[<a href="&#39;.$this->href.&#39;?&#39;.http_build_query($_GET).&#39;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >下页</a>] </span>&#39;;
    }
    $_GET[&#39;page&#39;] = $this->countPages;
    $pageStr.=&#39;<span>[<a href="&#39;.$this->href.&#39;?&#39;.http_build_query($_GET).&#39;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >尾页</a>] </span>&#39;;
    return $pageStr;
  }
  /**
   * construct_Pages 生成页码数组
   * 键为页码,值为链接
   * $this->page_arr=Array(
   *         [1] => index.php?page=1
   *         [2] => index.php?page=2
   *         [3] => index.php?page=3
   *         ......)
   */
  protected function construct_Pages(){
    //计算总页数
    $this->countPages=ceil($this->count/$this->subPages);
    //根据当前页计算前后页数
    $leftPage_num=floor($this->showPages/2);
    $rightPage_num=$this->showPages-$leftPage_num;
    //左边显示数为当前页减左边该显示的数 例如总显示7页 当前页是5 左边最小为5-3 右边为5+3
    $left=$this->currPage-$leftPage_num;
    $left=max($left,1); //左边最小不能小于1
    $right=$left+$this->showPages-1; //左边加显示页数减1就是右边显示数
    $right=min($right,$this->countPages); //右边最大不能大于总页数
    $left=max($right-$this->showPages+1,1); //确定右边再计算左边,必须二次计算
    for ($i=$left; $i <= $right; $i++) {
      $_GET[&#39;page&#39;] = $i;
      $this->page_arr[$i]=$this->href.&#39;?&#39;.http_build_query($_GET);
    }
  }
}
?>

Exemple d'utilisation demo.php :

<?php
/**
 * demo
 */
header("content-type:text/html;charset=utf8");
include(&#39;Page.class.php&#39;);  //引入类
//$p=new Page(总条数,显示页数,当前页码,每页显示条数,[链接]);
//连接不设置则为当前链接
$page=isset($_GET[&#39;page&#39;]) ? $_GET[&#39;page&#39;] : 1;
$p=new Page(100,4,$page,8);
//生成一个页码数组(键为页码,值为链接)
echo "<pre class="brush:php;toolbar:false">";
print_r($p->getPages());
//样式 共45条记录,每页显示10条,当前第1/4页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]
echo $p->showPages(1);

Recommandations associées :

Exemple de méthode PHP pour compresser la taille de l'image et la convertir au format jpg

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn