Heim  >  Artikel  >  PHP-Framework  >  Implementierung und Vorsichtsmaßnahmen der Paging-Seitenzahl-Sprungfunktion in ThinkPHP3.2

Implementierung und Vorsichtsmaßnahmen der Paging-Seitenzahl-Sprungfunktion in ThinkPHP3.2

PHPz
PHPzOriginal
2023-04-17 09:48:54639Durchsuche

Mit der kontinuierlichen Weiterentwicklung der modernen Internettechnologie steigt die Anzahl der Website-Besuche. Um Benutzern den Zugriff auf Daten zu erleichtern, ist die Paging-Funktion zu einer der wesentlichen Funktionen moderner Websites geworden. Im ThinkPHP3.2-Framework ist die Paging-Funktion ebenfalls sehr flexibel und Sie können den Paging-Stil und die Seitenzahl-Sprungfunktion anpassen. In diesem Artikel werden die Implementierungsmethode und Vorsichtsmaßnahmen der Paging-Seitenzahl-Sprungfunktion in ThinkPHP3.2 vorgestellt.

1. Paging-Funktion von ThinkPHP3.2

Im ThinkPHP3.2-Framework kann eine einfache Paging-Funktion durch die folgenden Methoden implementiert werden:

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

Unter diesen sind $list die abgefragten Daten, $where die Abfragebedingung, und $count ist die Gesamtzahl der Abfragedaten und $pageSize ist die auf jeder Seite angezeigte Datenmenge. Nach der Instanziierung der ThinkPage-Klasse können Sie paginiertes HTML über die Methode $Page->show() ausgeben.

2. Passen Sie den Paging-Stil an

Im ThinkPHP3.2-Framework können Sie den Paging-Stil mit den folgenden Methoden anpassen:

  1. Definieren Sie den Paging-Stil

Erstellen Sie eine Datei mit dem Namen Page.class.php im aktuellen Projekt, kopieren Sie den folgenden Code in die Datei:

<?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. Benutzerdefinierten Paginierungsstil verwenden

Führen Sie einen benutzerdefinierten Paginierungsstil im Controller ein und verwenden Sie ihn auf folgende Weise:

// 引入分页类
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());

Drei. Paginierungsseitennummer-Sprungfunktion

Im Im ThinkPHP3.2-Framework wird die Funktion zum Springen von Seitennummern durch Hinzufügen von Eingabefeldern und Schaltflächen im Paging-Stil implementiert. Die Schritte zum Hinzufügen der Seitenzahl-Sprungfunktion sind wie folgt:

  1. Ändern Sie den Paging-Stil

Fügen Sie ein Eingabefeld und eine Schaltfläche im benutzerdefinierten Paging-Stil hinzu:

$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. Verwenden Sie die Paging-Seitensprung-Funktion

In In der Ansichtsdatei können Sie den benutzerdefinierten Paging-Stil direkt verwenden und die Seitenzahl-Sprungfunktion implementieren:

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

Unter anderem verwenden Sie im benutzerdefinierten Paging-Stil „__PAGE__“ und „__HREF__“, um die aktuelle Seitenzahl bzw. den Sprunglink darzustellen . Geben Sie die Sprungseitennummer in das Eingabefeld ein und klicken Sie auf die Schaltfläche, um zur Seitennummer zu springen.

Zusammenfassung

Im ThinkPHP3.2-Framework kann die Paging-Seitensprungfunktion durch Hinzufügen von Eingabefeldern und Schaltflächen im Paging-Stil implementiert werden. Die Verwendung benutzerdefinierter Paging-Stile kann den Paging-Stil schöner machen und auch spezifischere Paging-Anforderungen erfüllen.

Das obige ist der detaillierte Inhalt vonImplementierung und Vorsichtsmaßnahmen der Paging-Seitenzahl-Sprungfunktion in ThinkPHP3.2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn