Rumah  >  Artikel  >  rangka kerja php  >  Pelaksanaan dan langkah berjaga-jaga fungsi lompat nombor halaman halaman dalam ThinkPHP3.2

Pelaksanaan dan langkah berjaga-jaga fungsi lompat nombor halaman halaman dalam ThinkPHP3.2

PHPz
PHPzasal
2023-04-17 09:48:54637semak imbas

Dengan perkembangan teknologi Internet moden yang berterusan, bilangan lawatan laman web semakin meningkat Bagi memudahkan pengguna mengakses data, fungsi paging telah menjadi salah satu fungsi penting laman web moden. Dalam rangka kerja ThinkPHP3.2, fungsi paging juga sangat fleksibel, dan anda boleh menyesuaikan gaya paging dan fungsi lompat nombor halaman. Artikel ini akan memperkenalkan kaedah pelaksanaan dan langkah berjaga-jaga bagi fungsi lompat nombor halaman halaman dalam ThinkPHP3.2.

1. Fungsi paging ThinkPHP3.2

Dalam rangka kerja ThinkPHP3.2, fungsi paging mudah boleh dilaksanakan melalui kaedah berikut:

// 查询数据
$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());

Antaranya, $list ialah data pertanyaan, $di mana keadaan pertanyaan, $count ialah jumlah bilangan data pertanyaan dan $pageSize ialah jumlah data yang dipaparkan pada setiap halaman. Selepas memulakan kelas ThinkPage, anda boleh mengeluarkan html penomboran melalui kaedah $Page->show().

2. Gaya paging tersuai

Dalam rangka kerja ThinkPHP3.2, anda boleh menyesuaikan gaya paging melalui kaedah berikut:

  1. Tentukan gaya paging

Buat fail bernama Page.class.php dalam projek semasa dan salin kod berikut ke dalam fail:

<?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. Gunakan gaya penomboran tersuai

Perkenalkan gaya paging tersuai dalam pengawal dan gunakannya dengan cara berikut:

// 引入分页类
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. Fungsi lompat nombor halaman penomboran

Dalam rangka kerja ThinkPHP3.2 , halaman halaman. fungsi lompat nombor dilaksanakan dengan menambah kotak input dan butang dalam gaya halaman. Langkah-langkah untuk menambah fungsi lompat halaman adalah seperti berikut:

  1. Ubah suai gaya paging

Tambah kotak input dan butang dalam gaya paging tersuai:

$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. Gunakan fungsi lompat halaman penomboran

Dalam fail paparan, anda boleh terus menggunakan gaya halaman halaman tersuai dan melaksanakan fungsi lompat nombor halaman:

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

Antaranya, dalam gaya paging tersuai, gunakan "__PAGE__" dan "__HREF__" untuk mewakili nombor halaman semasa dan pautan lompat masing-masing. Masukkan nombor halaman lompat dalam kotak input dan klik butang untuk melompat ke nombor halaman.

Ringkasan

Dalam rangka kerja ThinkPHP3.2, fungsi lompat nombor halaman halaman boleh dilaksanakan dengan menambahkan kotak input dan butang dalam gaya halaman. Menggunakan gaya paging tersuai boleh menjadikan gaya paging lebih cantik, dan juga boleh mencapai keperluan paging yang lebih khusus.

Atas ialah kandungan terperinci Pelaksanaan dan langkah berjaga-jaga fungsi lompat nombor halaman halaman dalam ThinkPHP3.2. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn