Heim > PHP-Framework > Denken Sie an PHP > Benutzerdefiniertes ThinkPHP6-Paging

Benutzerdefiniertes ThinkPHP6-Paging

Guanhui
Freigeben: 2020-05-11 09:57:35
nach vorne
6890 Leute haben es durchsucht

ThinkPHP6.0 definiert die Paginierungsklasse für uns vor, damit wir schnell paginieren können. Der von ThinkPHP6 bereitgestellte Paginierungsstil ist jedoch nicht das, was wir wollen. Wir müssen die Paginierungsklasse selbst erweitern und sehen, wie wir sie implementieren können.

Zuerst kopieren wir eine offizielle Paging-Klasse und ändern sie auf dieser Basis. Der spezifische Pfad befindet sich in seller/topthink/think-orm/src/paginator/driver/Bootstrap.php. Dann fügen wir ihn ein app/common/Bootstrap.php.

Ändern Sie den Dienstanbieter app/provider.php und ändern Sie den Standard-Paging-Treiber in unseren Treiber.

<?php
use app\ExceptionHandle;
use app\Request;
// 容器Provider定义文件
return [
    &#39;think\Request&#39;          => Request::class,
    &#39;think\exception\Handle&#39; => ExceptionHandle::class,
    &#39;think\Paginator&#39;    =>    &#39;app\common\Bootstrap&#39;
];
Nach dem Login kopieren

Lesen Sie den app/common/Bootstrap.php-Code und ändern Sie ihn darauf basierend. Das Folgende ist der offiziell bereitgestellte Paging-Code-Anbieter/topthink/think-orm/src/paginator/driver/Bootstrap.php

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2019 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: zhangyajun <448901948@qq.com>
// +----------------------------------------------------------------------
namespace think\paginator\driver;
use think\Paginator;
/**
 * Bootstrap 分页驱动
 */
class Bootstrap extends Paginator
{
    /**
     * 上一页按钮
     * @param string $text
     * @return string
     */
    protected function getPreviousButton(string $text = "&laquo;"): string
    {
        if ($this->currentPage() <= 1) {
            return $this->getDisabledTextWrapper($text);
        }
        $url = $this->url(
            $this->currentPage() - 1
        );
        return $this->getPageLinkWrapper($url, $text);
    }
    /**
     * 下一页按钮
     * @param string $text
     * @return string
     */
    protected function getNextButton(string $text = &#39;&raquo;&#39;): string
    {
        if (!$this->hasMore) {
            return $this->getDisabledTextWrapper($text);
        }
        $url = $this->url($this->currentPage() + 1);
        return $this->getPageLinkWrapper($url, $text);
    }
    /**
     * 页码按钮
     * @return string
     */
    protected function getLinks(): string
    {
        if ($this->simple) {
            return &#39;&#39;;
        }
        $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;<ul class="pager">%s %s</ul>&#39;,
                    $this->getPreviousButton(),
                    $this->getNextButton()
                );
            } else {
                return sprintf(
                    &#39;<ul class="pagination">%s %s %s</ul>&#39;,
                    $this->getPreviousButton(),
                    $this->getLinks(),
                    $this->getNextButton()
                );
            }
        }
    }
    /**
     * 生成一个可点击的按钮
     *
     * @param  string $url
     * @param  string $page
     * @return string
     */
    protected function getAvailablePageWrapper(string $url, string $page): string
    {
        return &#39;<li><a href="&#39; . htmlentities($url) . &#39;">&#39; . $page . &#39;</a></li>&#39;;
    }
    /**
     * 生成一个禁用的按钮
     *
     * @param  string $text
     * @return string
     */
    protected function getDisabledTextWrapper(string $text): string
    {
        return &#39;<li class="disabled"><span>&#39; . $text . &#39;</span></li>&#39;;
    }
    /**
     * 生成一个激活的按钮
     *
     * @param  string $text
     * @return string
     */
    protected function getActivePageWrapper(string $text): string
    {
        return &#39;<li class="active"><span>&#39; . $text . &#39;</span></li>&#39;;
    }
    /**
     * 生成省略号按钮
     *
     * @return string
     */
    protected function getDots(): string
    {
        return $this->getDisabledTextWrapper(&#39;...&#39;);
    }
    /**
     * 批量生成页码按钮.
     *
     * @param  array $urls
     * @return string
     */
    protected function getUrlLinks(array $urls): string
    {
        $html = &#39;&#39;;
        foreach ($urls as $page => $url) {
            $html .= $this->getPageLinkWrapper($url, $page);
        }
        return $html;
    }
    /**
     * 生成普通页码按钮
     *
     * @param  string $url
     * @param  string    $page
     * @return string
     */
    protected function getPageLinkWrapper(string $url, string $page): string
    {
        if ($this->currentPage() == $page) {
            return $this->getActivePageWrapper($page);
        }
        return $this->getAvailablePageWrapper($url, $page);
    }
}
Nach dem Login kopieren

Ändern Sie beispielsweise einfach die vorherige Seite und die nächste Seite in chinesische Schriftzeichen, ändern Sie die folgenden Orten.

/**
     * 上一页按钮
     * @param string $text
     * @return string
     */
    protected function getPreviousButton(string $text = "上一页"): string
    {
        if ($this->currentPage() <= 1) {
            return $this->getDisabledTextWrapper($text);
        }
        $url = $this->url(
            $this->currentPage() - 1
        );
        return $this->getPageLinkWrapper($url, $text);
    }
    /**
     * 下一页按钮
     * @param string $text
     * @return string
     */
    protected function getNextButton(string $text = &#39;下一页&#39;): string
    {
        if (!$this->hasMore) {
            return $this->getDisabledTextWrapper($text);
        }
        $url = $this->url($this->currentPage() + 1);
        return $this->getPageLinkWrapper($url, $text);
    }
Nach dem Login kopieren

Dann modifizieren Sie es entsprechend Ihren Geschäftsanforderungen!

Empfohlene Tutorials: „PHP-Tutorial“ „ThinkPHP-Tutorial

Das obige ist der detaillierte Inhalt vonBenutzerdefiniertes ThinkPHP6-Paging. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:jianshu.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage