Maison  >  Article  >  cadre php  >  Implémentation et précautions de la fonction de saut de numéro de page de pagination dans ThinkPHP3.2

Implémentation et précautions de la fonction de saut de numéro de page de pagination dans ThinkPHP3.2

PHPz
PHPzoriginal
2023-04-17 09:48:54639parcourir

Avec le développement continu de la technologie Internet moderne, le nombre de visites de sites Web augmente. Afin de faciliter l'accès des utilisateurs aux données, la fonction de pagination est devenue l'une des fonctions essentielles des sites Web modernes. Dans le framework ThinkPHP3.2, la fonction de pagination est également très flexible et vous pouvez personnaliser le style de pagination et la fonction de saut de numéro de page. Cet article présentera la méthode d'implémentation et les précautions de la fonction de saut de numéro de page de pagination dans ThinkPHP3.2.

1. Fonction de pagination de ThinkPHP3.2

Dans le framework ThinkPHP3.2, une fonction de pagination simple peut être implémentée via les méthodes suivantes :

// 查询数据
$list = M('User')->where($where)->order('id desc')->limit($Page->firstRow.','.$Page->listRows)->select();

// 实例化分页类
$Page = new \Think\Page($count,$pageSize);

// 输出分页html
$this->assign('page',$Page->show());

Parmi elles, $list est les données interrogées, $where est la condition de requête, et $count est le nombre total de données de requête, et $pageSize est la quantité de données affichées sur chaque page. Après avoir instancié la classe ThinkPage, vous pouvez générer du HTML paginé via la méthode $Page->show().

2. Personnaliser le style de pagination

Dans le framework ThinkPHP3.2, vous pouvez personnaliser le style de pagination via les méthodes suivantes :

  1. Définir le style de pagination

Créez un fichier nommé Page.class.php dans le fichier actuel. project , copiez le code suivant dans le fichier :

<?php
namespace Think;
class Page {
    // 定义分页样式
    private $rollPage   = 5; // 分页栏每页显示的页数
    private $lastSuffix = true; // 是否显示最后一页的页码后缀
    private $config     = array(
        &#39;header&#39; => '<span class="rows">共 %TOTAL_ROW% 条记录</span>',
        'prev'   => '<<&#39;,
        &#39;next&#39;   => '>>',
        'first'  => '1...',
        'last'   => '...%TOTAL_PAGE%',
        'theme'  => '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%',
    );
    private $totalRows  = 0; // 总行数
    private $listRows   = 20; // 每页显示行数
    private $totalPages = 0; // 总页数
    private $nowPage    = 1; // 当前页数
    private $firstRow   = 1; // 起始行数
    private $varPage    = 'page'; // 分页变量名
    private $p          = 'p'; // 分页参数名
    private $url        = ''; // 当前链接URL
    private $baseUrl    = ''; // 分页基础URL
    private $params     = array(); // 分页跳转时要带的参数
    private $anchor     = ''; // 锚点参数
    // 构造方法
    public function __construct($totalRows,$listRows='',$p='page'){
        $this->totalRows = $totalRows;
        $this->varPage = $p;
        if (!empty($listRows)) {
            $this->listRows = $listRows;
        }
        $this->totalPages = ceil($this->totalRows/$this->listRows); //总页数
        $this->nowPage    = !empty($_GET[$this->varPage])?intval($_GET[$this->varPage]):1;
        if(!empty($this->totalPages) && $this->nowPage>$this->totalPages) {
            $this->nowPage = $this->totalPages;
        }
        $this->firstRow   = $this->listRows*($this->nowPage-1);
    }
    // 显示分页
    public function show($url='') {
        if (0 == $this->totalRows) {
            return '';
        }

        // 记录当前URL
        $this->url = empty($url) ? U(ACTION_NAME).'/' : $url;
        // 获取当前页码
        $this->nowPage    = !empty($_GET[$this->varPage])?intval($_GET[$this->varPage]):1;
        // 计算分页信息
        $this->totalPages = ceil($this->totalRows/$this->listRows);

        // 分页处理
        if($this->totalPages > $this->rollPage){
            $linkPage = "<ul class=&#39;pagination&#39;>";
            $inum = floor($this->rollPage/2);
            if($this->nowPage <= $inum){
                $this->lastSuffix=false;
            }
            if($this->nowPage > 1){
                $this->addUrl($linkPage,$this->nowPage-1,'上一页','class="prev"');
            }
            for($i = 1; $i <= $this->rollPage; $i++){
                if(($this->nowPage+$inum) >= $this->totalPages && $this->totalPages > $this->rollPage){
                    $page = $this->totalPages-$this->rollPage+$i;
                }else{
                    $page = $this->nowPage-$inum+$i;
                }
                if($page > 0 && $page != $this->nowPage){
                    if($page <= $this->totalPages){
                        $this->addUrl($linkPage,$page,'第'.$page.'页','');
                    }else{
                        break;
                    }
                }else{
                    if($page > 0 && $this->rollPage < $this->totalPages){
                        $this->addUrl($linkPage,$page,'第'.$page.'页','');
                    }
                }
            }
            if($this->nowPage < $this->totalPages){
                $this->addUrl($linkPage,$this->nowPage+1,'下一页','class="next"');
            }
            if($this->lastSuffix){
                $this->addUrl($linkPage,$this->totalPages,'最后一页');
            }
            $linkPage.='</ul>';
        }else{
            $linkPage = "<ul class=&#39;pagination&#39;>";
            for($i=1;$i<=$this->totalPages;$i++){
                if($this->nowPage==$i) {
                    $linkPage.='<li class="active"><span>'.$i.'</span></li>';
                } else {
                    $this->addUrl($linkPage,$i,'第'.$i.'页','');
                }
            }
            $linkPage.='</ul>';
        }
        $pageStr  = str_replace(
            array('%HEADER%','%NOW_PAGE%','%TOTAL_PAGE%','%TOTAL_ROW%','%FIRST%','%UP_PAGE%','%LINK_PAGE%','%DOWN_PAGE%','%END%'),
            array($this->config['header'],$this->nowPage,$this->totalPages,$this->totalRows,$this->config['first'],$this->config['prev'],$linkPage,$this->config['next'],$this->config['last']),$this->config['theme']);
        return $pageStr;
    }
    // 添加分页URL
    protected function addUrl(&$linkPage,$page,$text,$class=''){
        if($page > 0){
            $url = $this->url;
            $url .= strpos($url,'?') ? '&' : '?';
            $url .= $this->p.'='.$page;
            if(!empty($this->params)){
                foreach($this->params as $key=>$val){
                    $url .= '&'.$key.'='.$val;
                }
            }
            if(!empty($this->anchor)){
                $url .= '#'.$this->anchor;
            }
            $linkPage.='<li &#39;.$class.&#39;><a href="&#39;.htmlentities($url).&#39;">'.$text.'</a></li>';
        }
    }
}
  1. Utilisez un style de pagination personnalisé

Introduisez un style de pagination personnalisé dans le contrôleur et utilisez-le de la manière suivante :

// 引入分页类
import("Think.Page");
// 查询数据总数
$count = M('User')->where($where)->count();
// 实例化分页类
$Page = new \Think\Page($count,$pageSize);
// 自定义分页样式
$Page->setConfig('prev', '上一页');
$Page->setConfig('next', '下一页');
$Page->setConfig('first', '第一页');
$Page->setConfig('last', '最后一页');
$Page->setConfig('theme', '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%');
// 查询数据
$list = M('User')->where($where)->order('id desc')->limit($Page->firstRow.','.$Page->listRows)->select();
// 输出分页html
$this->assign('page',$Page->show());

Fonction de saut de numéro de page de pagination

Dans le fichier. ThinkPHP3.2 framework, la fonction de saut de numéro de page de pagination est implémentée en ajoutant des zones de saisie et des boutons dans le style de pagination. Les étapes pour ajouter la fonction de saut de numéro de page sont les suivantes :

  1. Modifier le style de pagination

Ajouter une zone de saisie et un bouton dans le style de pagination personnalisé :

$Page->setConfig('theme', '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% <div class="input-group input-group-sm" style="width: 150px;display:inline;"><input type="text" class="form-control" value="__PAGE__" onkeydown="javascript:if(event.keyCode==13){var page=(this.value|0);location.href=\&#39;__HREF__\&#39;.replace(\&#39;__PAGE__\&#39;,page);return false;}"><span class="input-group-btn"><button class="btn btn-default" onclick="javascript:var page=(this.previousSibling.value|0);location.href=\&#39;__HREF__\&#39;.replace(\&#39;__PAGE__\&#39;,page);return false;">GO!</button></span></div>');
  1. Utiliser la fonction de saut de page de pagination

Dans le fichier de visualisation, vous pouvez utiliser directement le style de pagination personnalisé et implémenter la fonction de saut de numéro de page :

<div class="pagination">
    <?php echo $page;?>
</div>

Parmi eux, dans le style de pagination personnalisé, utilisez "__PAGE__" et "__HREF__" pour représenter respectivement le numéro de page actuel et le lien de saut . Entrez le numéro de page de saut dans la zone de saisie et cliquez sur le bouton pour accéder au numéro de page.

Résumé

Dans le framework ThinkPHP3.2, la fonction de saut de page de pagination peut être implémentée en ajoutant des zones de saisie et des boutons dans le style de pagination. L'utilisation de styles de pagination personnalisés peut rendre le style de pagination plus beau et peut également répondre à des besoins de pagination plus spécifiques.

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