Heim  >  Artikel  >  Backend-Entwicklung  >  Das ausführlichste Tutorial zum benutzerdefinierten ThinkPHP5-Paging

Das ausführlichste Tutorial zum benutzerdefinierten ThinkPHP5-Paging

小云云
小云云Original
2017-11-28 09:16:064514Durchsuche

Als PHP-Programmierer müssen Sie beim Schreiben einer Listenseite fast ein Paging-Programm schreiben. Es gibt viele Paging-Methoden. In diesem Artikel geben wir Ihnen eine detaillierte Einführung in das Tutorial zur benutzerdefinierten Paging-Klasse von ThinkPHP5.

Schritt 1: Erstellen Sie die Datei Page.php und fügen Sie sie in extensionpage ein. Sie können hier auch selbst entscheiden, solange der Namespace korrekt ist

<?php
namespace page;
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2017 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: zhangyajun <448901948@qq.com>
// +----------------------------------------------------------------------
 
use think\Paginator;
 
class Page extends Paginator
{
 
    //首页
    protected function home() {
        if ($this->currentPage() > 1) {
            return "<a href=&#39;" . $this->url(1) . "&#39; title=&#39;首页&#39;>首页</a>";
        } else {
            return "<p>首页</p>";
        }
    }
 
    //上一页
    protected function prev() {
        if ($this->currentPage() > 1) {
            return "<a href=&#39;" . $this->url($this->currentPage - 1) . "&#39; title=&#39;上一页&#39;>上一页</a>";
        } else {
            return "<p>上一页</p>";
        }
    }
 
    //下一页
    protected function next() {
        if ($this->hasMore) {
            return "<a href=&#39;" . $this->url($this->currentPage + 1) . "&#39; title=&#39;下一页&#39;>下一页</a>";
        } else {
            return"<p>下一页</p>";
        }
    }
 
    //尾页
    protected function last() {
        if ($this->hasMore) {
            return "<a href=&#39;" . $this->url($this->lastPage) . "&#39; title=&#39;尾页&#39;>尾页</a>";
        } else {
            return "<p>尾页</p>";
        }
    }
 
    //统计信息
    protected function info(){
        return "<p class=&#39;pageRemark&#39;>共<b>" . $this->lastPage .
            "</b>页<b>" . $this->total . "</b>条数据</p>";
    }
 
    /**
     * 页码按钮
     * @return string
     */
    protected function getLinks()
    {
 
        $block = [
            &#39;first&#39;  => null,
            &#39;slider&#39; => null,
            &#39;last&#39;   => null
        ];
 
        $side   = 3;
        $window = $side * 2;
 
        if ($this->lastPage < $window + 6) {
            $block[&#39;first&#39;] = $this->getUrlRange(1, $this->lastPage);
        } elseif ($this->currentPage <= $window) {
            $block[&#39;first&#39;] = $this->getUrlRange(1, $window + 2);
            $block[&#39;last&#39;]  = $this->getUrlRange($this->lastPage - 1, $this->lastPage);
        } elseif ($this->currentPage > ($this->lastPage - $window)) {
            $block[&#39;first&#39;] = $this->getUrlRange(1, 2);
            $block[&#39;last&#39;]  = $this->getUrlRange($this->lastPage - ($window + 2), $this->lastPage);
        } else {
            $block[&#39;first&#39;]  = $this->getUrlRange(1, 2);
            $block[&#39;slider&#39;] = $this->getUrlRange($this->currentPage - $side, $this->currentPage + $side);
            $block[&#39;last&#39;]   = $this->getUrlRange($this->lastPage - 1, $this->lastPage);
        }
 
        $html = &#39;&#39;;
 
        if (is_array($block[&#39;first&#39;])) {
            $html .= $this->getUrlLinks($block[&#39;first&#39;]);
        }
 
        if (is_array($block[&#39;slider&#39;])) {
            $html .= $this->getDots();
            $html .= $this->getUrlLinks($block[&#39;slider&#39;]);
        }
 
        if (is_array($block[&#39;last&#39;])) {
            $html .= $this->getDots();
            $html .= $this->getUrlLinks($block[&#39;last&#39;]);
        }
 
        return $html;
    }
 
    /**
     * 渲染分页html
     * @return mixed
     */
    public function render()
    {
        if ($this->hasPages()) {
            if ($this->simple) {
                return sprintf(
                    &#39;%s<div class="pagination">%s %s %s</div>&#39;,
                    $this->css(),
                    $this->prev(),
                    $this->getLinks(),
                    $this->next()
                );
            } else {
                return sprintf(
                    &#39;%s<div class="pagination">%s %s %s %s %s %s</div>&#39;,
                    $this->css(),
                    $this->home(),
                    $this->prev(),
                    $this->getLinks(),
                    $this->next(),
                    $this->last(),
                    $this->info()
                );
            }
        }
    }
 
    /**
     * 生成一个可点击的按钮
     *
     * @param  string $url
     * @param  int    $page
     * @return string
     */
    protected function getAvailablePageWrapper($url, $page)
    {
        return &#39;<a href="&#39; . htmlentities($url) . &#39;" title="第"&#39;. $page .&#39;"页" >&#39; . $page . &#39;</a>&#39;;
    }
 
    /**
     * 生成一个禁用的按钮
     *
     * @param  string $text
     * @return string
     */
    protected function getDisabledTextWrapper($text)
    {
        return &#39;<p class="pageEllipsis">&#39; . $text . &#39;</p>&#39;;
    }
 
    /**
     * 生成一个激活的按钮
     *
     * @param  string $text
     * @return string
     */
    protected function getActivePageWrapper($text)
    {
        return &#39;<a href="" class="cur">&#39; . $text . &#39;</a>&#39;;
    }
 
    /**
     * 生成省略号按钮
     *
     * @return string
     */
    protected function getDots()
    {
        return $this->getDisabledTextWrapper(&#39;...&#39;);
    }
 
    /**
     * 批量生成页码按钮.
     *
     * @param  array $urls
     * @return string
     */
    protected function getUrlLinks(array $urls)
    {
        $html = &#39;&#39;;
 
        foreach ($urls as $page => $url) {
            $html .= $this->getPageLinkWrapper($url, $page);
        }
 
        return $html;
    }
 
    /**
     * 生成普通页码按钮
     *
     * @param  string $url
     * @param  int    $page
     * @return string
     */
    protected function getPageLinkWrapper($url, $page)
    {
        if ($page == $this->currentPage()) {
            return $this->getActivePageWrapper($page);
        }
 
        return $this->getAvailablePageWrapper($url, $page);
    }
 
    /**
     * 分页样式
     */
    protected function css(){
        return &#39;  <style type="text/css">
            .pagination p{
                margin:0;
                cursor:pointer
            }
            .pagination{
                height:40px;
                padding:20px 0px;
            }
            .pagination a{
                display:block;
                float:left;
                margin-right:10px;
                padding:2px 12px;
                height:24px;
                border:1px #cccccc solid;
                background:#fff;
                text-decoration:none;
                color:#808080;
                font-size:12px;
                line-height:24px;
            }
            .pagination a:hover{
                color:#077ee3;
                background: white;
                border:1px #077ee3 solid;
            }
            .pagination a.cur{
                border:none;
                background:#077ee3;
                color:#fff;
            }
            .pagination p{
                float:left;
                padding:2px 12px;
                font-size:12px;
                height:24px;
                line-height:24px;
                color:#bbb;
                border:1px #ccc solid;
                background:#fcfcfc;
                margin-right:8px;
 
            }
            .pagination p.pageRemark{
                border-style:none;
                background:none;
                margin-right:0px;
                padding:4px 0px;
                color:#666;
            }
            .pagination p.pageRemark b{
                color:red;
            }
            .pagination p.pageEllipsis{
                border-style:none;
                background:none;
                padding:4px 0px;
                color:#808080;
            }
            .dates li {font-size: 14px;margin:20px 0}
            .dates li span{float:right}
        </style>&#39;;
    }
}

Schritt 2: Ändern Sie die Konfigurationsdatei

//分页配置  
   &#39;paginate&#39;               => [  
       &#39;type&#39;      => &#39;page\Page&#39;,//分页类  
       &#39;var_page&#39;  => &#39;page&#39;,  
       &#39;list_rows&#39; => 15,  
   ],

Rendering-Vorschau:

Das ausführlichste Tutorial zum benutzerdefinierten ThinkPHP5-Paging

Das obige ist das detaillierte Tutorial der benutzerdefinierten ThinkPHP5.0-Paging-Klasse Ich hoffe, es kann allen helfen.

Verwandte Empfehlungen:

Wie wird das benutzerdefinierte Laravel-Paging implementiert?

Beispielanalyse des benutzerdefinierten Paging-Effekts im Laravel-Framework

PHP-benutzerdefinierte Paging-Funktion_PHP-Tutorial

Das obige ist der detaillierte Inhalt vonDas ausführlichste Tutorial zum benutzerdefinierten ThinkPHP5-Paging. 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