Maison  >  Article  >  développement back-end  >  Une explication de la façon d'implémenter des styles personnalisés de pagination dans thinkPHP3.2

Une explication de la façon d'implémenter des styles personnalisés de pagination dans thinkPHP3.2

jacklove
jackloveoriginal
2018-07-02 18:00:131579parcourir

Cet article présente principalement la méthode de réalisation de styles personnalisés de pagination dans thinkPHP3.2, et analyse la modification et l'utilisation de thinkPHP3.2 pour le code du framework sous-jacent sous forme d'exemples. Les amis dans le besoin peuvent s'y référer

.

L'exemple de cet article décrit comment implémenter des styles de pagination personnalisés dans thinkPHP3.2. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Ce qui suit est une pagination personnalisée pour Tp3.2. Cette méthode a été inspirée pour écrire ceci après avoir lu le blog d'un internaute. Après quelques modifications, vous pouvez également modifier le style personnalisé après avoir vu le code ;

Le fichier de contrôle de style principal est page.css, et la classe de pagination en bas du framework peut être directement collée et copiée

1. Le chemin page.class.php en bas du framework (EngineLibraryThink)

En fait, ce fichier n'a pas besoin d'être trop modifié, vous peut également utiliser directement celui officiel ; voici ce que je fais maintenant Utilisé, légèrement modifié

<?php
namespace Think;
class Page{
  public $firstRow; // 起始行数
  public $listRows; // 列表每页显示行数
  public $parameter; // 分页跳转时要带的参数
  public $totalRows; // 总行数
  public $totalPages; // 分页总页面数
  public $rollPage  = 11;// 分页栏每页显示的页数
  public $lastSuffix = true; // 最后一页是否显示总页数
  private $p    = &#39;p&#39;; //分页参数名
  private $url   = &#39;&#39;; //当前链接URL
  private $nowPage = 1;
  // 分页显示定制
  private $config = array(
    &#39;header&#39; => &#39;<span class="rows">共 %TOTAL_ROW% 条记录</span>&#39;,
    &#39;prev&#39;  => &#39;<<&#39;,
    &#39;next&#39;  => &#39;>>&#39;,
    &#39;first&#39; => &#39;1...&#39;,
    &#39;last&#39;  => &#39;...%TOTAL_PAGE%&#39;,
    &#39;theme&#39; => &#39;%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%&#39;,
  );
  /**
   * 架构函数
   * @param array $totalRows 总的记录数
   * @param array $listRows 每页显示记录数
   * @param array $parameter 分页跳转的参数
   */
  public function __construct($totalRows, $listRows=20, $parameter = array()) {
    C(&#39;VAR_PAGE&#39;) && $this->p = C(&#39;VAR_PAGE&#39;); //设置分页参数名称
    /* 基础设置 */
    $this->totalRows = $totalRows; //设置总记录数
    $this->listRows  = $listRows; //设置每页显示行数
    $this->parameter = empty($parameter) ? $_GET : $parameter;
    $this->nowPage  = empty($_GET[$this->p]) ? 1 : intval($_GET[$this->p]);
    $this->firstRow  = $this->listRows * ($this->nowPage - 1);
  }
  /**
   * 定制分页链接设置
   * @param string $name 设置名称
   * @param string $value 设置值
   */
  public function setConfig($name,$value) {
    if(isset($this->config[$name])) {
      $this->config[$name] = $value;
    }
  }
  /**
   * 生成链接URL
   * @param integer $page 页码
   * @return string
   */
  private function url($page){
    return str_replace(urlencode(&#39;[PAGE]&#39;), $page, $this->url);
  }
  /**
   * 组装分页链接
   * @return string
   */
  public function show() {
    if(0 == $this->totalRows) return &#39;&#39;;
    /* 生成URL */
    $this->parameter[$this->p] = &#39;[PAGE]&#39;;
    $this->url = U(ACTION_NAME, $this->parameter);
    /* 计算分页信息 */
    $this->totalPages = ceil($this->totalRows / $this->listRows); //总页数
    if(!empty($this->totalPages) && $this->nowPage > $this->totalPages) {
      $this->nowPage = $this->totalPages;
    }
    /* 计算分页零时变量 */
    $now_cool_page   = $this->rollPage/2;
    $now_cool_page_ceil = ceil($now_cool_page);
    $this->lastSuffix && $this->config[&#39;last&#39;] = $this->totalPages;
    //上一页
    $up_row = $this->nowPage - 1;
    $up_page = $up_row > 0 ? &#39;<a class="prev" href="&#39; . $this->url($up_row) . &#39;" rel="external nofollow" >&#39; . $this->config[&#39;prev&#39;] . &#39;</a>&#39; : &#39;&#39;;
    //下一页
    $down_row = $this->nowPage + 1;
    $down_page = ($down_row <= $this->totalPages) ? &#39;<a class="next" href="&#39; . $this->url($down_row) . &#39;" rel="external nofollow" >&#39; . $this->config[&#39;next&#39;] . &#39;</a>&#39; : &#39;&#39;;
    //第一页
    $the_first = &#39;&#39;;
    if($this->totalPages > $this->rollPage && ($this->nowPage - $now_cool_page) >= 1){
      $the_first = &#39;<a class="first" href="&#39; . $this->url(1) . &#39;" rel="external nofollow" >&#39; . $this->config[&#39;first&#39;] . &#39;</a>&#39;;
    }
    //最后一页
    $the_end = &#39;&#39;;
    if($this->totalPages > $this->rollPage && ($this->nowPage + $now_cool_page) < $this->totalPages){
      $the_end = &#39;<a class="end" href="&#39; . $this->url($this->totalPages) . &#39;" rel="external nofollow" >&#39; . $this->config[&#39;last&#39;] . &#39;</a>&#39;;
    }
    //数字连接
    $link_page = "";
    for($i = 1; $i <= $this->rollPage; $i++){
      if(($this->nowPage - $now_cool_page) <= 0 ){
        $page = $i;
      }elseif(($this->nowPage + $now_cool_page - 1) >= $this->totalPages){
        $page = $this->totalPages - $this->rollPage + $i;
      }else{
        $page = $this->nowPage - $now_cool_page_ceil + $i;
      }
      if($page > 0 && $page != $this->nowPage){
        if($page <= $this->totalPages){
          $link_page .= &#39;<a class="num" href="&#39; . $this->url($page) . &#39;" rel="external nofollow" >&#39; . $page . &#39;</a>&#39;;
        }else{
          break;
        }
      }else{
        if($page > 0 && $this->totalPages != 1){
          $link_page .= &#39;<span class="current">&#39; . $page . &#39;</span>&#39;;
        }
      }
    }
    //替换分页内容
    $page_str = str_replace(
      array(&#39;%HEADER%&#39;, &#39;%NOW_PAGE%&#39;, &#39;%UP_PAGE%&#39;, &#39;%DOWN_PAGE%&#39;, &#39;%FIRST%&#39;, &#39;%LINK_PAGE%&#39;, &#39;%END%&#39;, &#39;%TOTAL_ROW%&#39;, &#39;%TOTAL_PAGE%&#39;),
      array($this->config[&#39;header&#39;], $this->nowPage, $up_page, $down_page, $the_first, $link_page, $the_end, $this->totalRows, $this->totalPages),
      $this->config[&#39;theme&#39;]);
    return "<p>{$page_str}</p>";
  }
}

2. Contrôleur, juste ; écrire une démo.

public function index(){
    $obj=M("news");
    $count = $obj->where(&#39;status=1 and classID=74 &#39;)->count();// 查询满足要求的总记录数
    $limit = 10;
    $Page = new \Think\Page($count,$limit);// 实例化分页类 传入总记录数和每页显示的记录数(25)
    $show    = $Page->show();// 分页显示输出
    $list = $obj->where(&#39;status=1 and classID=74 &#39;)->order(&#39;writetime desc&#39;)->limit($Page->firstRow.&#39;,&#39;.$Page->listRows)->select();
    $firstlist = $obj->where(&#39;status=1 and classID=74 and Indexfirst=1&#39;)->order(&#39;writetime desc&#39;)->limit(4)->select();
    $this->assign(&#39;firstlist&#39;,$firstlist);
    $this->assign(&#39;page&#39;,$show);// 赋值分页输出
    $this->assign(&#39;list&#39;,$list);
    $this->display();
}

3. Vient ensuite le calque Vue, contrôle de style. fichier page.css

.b-page {
 background: #fff;
 box-shadow: 0px 1px 2px 0px #E2E2E2;
}
.page {
 width: 100%;
 background: #FFF;
 text-align: center;
 overflow: hidden;
 font-size:14px;
 margin-top:50px;
}
.page .first,
.page .prev,
.page .current,
.page .num,
.page .current,
.page .next,
.page .end {
 padding: 8px 16px;
 margin: 0px 5px;
 display: inline-block;
 color: #144970;
 border: 1px solid #F2F2F2;
 border-radius: 5px;
}
.page .first:hover,
.page .prev:hover,
.page .current:hover,
.page .num:hover,
.page .current:hover,
.page .next:hover,
.page .end:hover {
 text-decoration: none;
 background: #F8F5F5;
}
.page .current {
 background-color: #144970;
 color: #FFF;
 border-radius: 5px;
}
.page .current:hover {
 text-decoration: none;
 background: #144970;
}
.page .not-allowed {
 cursor: not-allowed;
}

Articles qui pourraient vous intéresser :

Analyse de l'exemple de fonction de téléchargement multi-images implémenté par le framework Laravel + Blob

Nouvelle version de Swoole 1.10.0 publiée, ajoutant de nombreuses nouvelles fonctionnalités d'analyse

Un exemple de la façon d'implémenter une matrice d'impression dans le sens des aiguilles d'une montre (matrice spirale) en PHP

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