ホームページ PHPフレームワーク ThinkPHP ThinkPHP3.2におけるページングページ番号ジャンプ機能の実装と注意点

ThinkPHP3.2におけるページングページ番号ジャンプ機能の実装と注意点

Apr 17, 2023 am 09:48 AM

最新のインターネット技術の継続的な発展に伴い、Web サイトのアクセス数は増加しており、ユーザーがデータにアクセスしやすくするために、ページング機能は現代の Web サイトに不可欠な機能の 1 つとなっています。 ThinkPHP3.2 フレームワークでは、ページング機能も非常に柔軟で、ページング スタイルやページ番号ジャンプ機能をカスタマイズできます。この記事では、ThinkPHP3.2におけるページングのページ番号ジャンプ機能の実装方法と注意点を紹介します。

1. ThinkPHP3.2 のページング機能

ThinkPHP3.2 フレームワークでは、以下の方法で簡単なページング機能を実装できます:

// 查询数据
$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());
ログイン後にコピー

その内、$listはクエリです。取得されたデータの場合、$where はクエリ条件、$count はクエリ データの総数、$pageSize は各ページに表示されるデータの量です。 \Think\Page クラスをインスタンス化した後、$Page->show() メソッドを通じてページ分割された HTML を出力できます。

2. カスタマイズされたページング スタイル

ThinkPHP3.2 フレームワークでは、次の方法でページング スタイルをカスタマイズできます:

  1. ページング スタイルを定義する

現在のプロジェクトに Page.class.php という名前のファイルを作成し、次のコードをファイルにコピーします:

<?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. カスタム ページング スタイルを使用する

カスタム ページング スタイルをコントローラーに導入し、次の方法で使用します:

// 引入分页类
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());
ログイン後にコピー

3. ページネーション ページ番号ジャンプ関数

ThinkPHP3.2 フレームワークでは、ページング ページ番号がジャンプします。伝達関数は、ページング スタイルで入力ボックスとボタンを追加することで実装されます。ページ番号ジャンプ機能を追加する手順は次のとおりです。

  1. ページング スタイルを変更する

カスタム ページング スタイルに入力ボックスとボタンを追加します:

$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. ページング ページ ジャンプ関数を使用する

ビュー ファイルで、カスタマイズされたページング スタイルを直接使用して、ページ ジャンプ関数を実装できます。

<div class="pagination">
    <?php echo $page;?>
</div>
ログイン後にコピー

このうち、カスタム ページング スタイルでは、現在のページ番号とジャンプ リンクをそれぞれ「__PAGE__」と「__HREF__」を使用します。入力ボックスにジャンプページ番号を入力し、ボタンをクリックするとそのページ番号にジャンプします。

概要

ThinkPHP3.2 フレームワークでは、ページングのページ番号ジャンプ機能は、ページング スタイルに入力ボックスとボタンを追加することで実装できます。カスタム ページング スタイルを使用すると、ページング スタイルをより美しくすることができ、より具体的なページングのニーズにも対応できます。

以上がThinkPHP3.2におけるページングページ番号ジャンプ機能の実装と注意点の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)