thinkphp6.0給我們預定義了paginate分頁類,幫助我們快速分頁,但是thinkphp6提供的分頁的樣式并不是我們想要的,需要我們自己擴展分頁類,看看具體如何實現吧!
首先我們去復制一份官方的寫好的分頁類,并在此基礎上進行修改,具體的路徑在vendor/topthink/think-orm/src/paginator/driver/bootstrap.php,然后在app/common/Bootstrap.php粘貼。
修改app/provider.php服務提供者,修改默認的分頁驅動為我們的驅動。
<?php use appExceptionHandle; use appRequest; // 容器Provider定義文件 return [ 'thinkRequest' =>?Request::class, ????'thinkexceptionHandle'?=>?ExceptionHandle::class, ????'thinkPaginator'????=>????'appcommonBootstrap' ];
閱讀app/common/Bootstrap.php代碼,在此基礎上修改。以下是官方提供的分頁代碼vendor/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?thinkpaginatordriver; use?thinkPaginator; /** ?*?Bootstrap?分頁驅動 ?*/ class?Bootstrap?extends?Paginator { ????/** ?????*?上一頁按鈕 ?????*?@param?string?$text ?????*?@return?string ?????*/ ????protected?function?getPreviousButton(string?$text?=?"?"):?string ????{ ????????if?($this->currentPage()?getDisabledTextWrapper($text); ????????} ????????$url?=?$this->url( ????????????$this->currentPage()?-?1 ????????); ????????return?$this->getPageLinkWrapper($url,?$text); ????} ????/** ?????*?下一頁按鈕 ?????*?@param?string?$text ?????*?@return?string ?????*/ ????protected?function?getNextButton(string?$text?=?'?'):?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?''; ????????} ????????$block?=?[ ????????????'first'??=>?null, ????????????'slider'?=>?null, ????????????'last'???=>?null, ????????]; ????????$side???=?3; ????????$window?=?$side?*?2; ????????if?($this->lastPage?getUrlRange(1,?$this->lastPage); ????????}?elseif?($this->currentPage?getUrlRange(1,?$window?+?2); ????????????$block['last']??=?$this->getUrlRange($this->lastPage?-?1,?$this->lastPage); ????????}?elseif?($this->currentPage?>?($this->lastPage?-?$window))?{ ????????????$block['first']?=?$this->getUrlRange(1,?2); ????????????$block['last']??=?$this->getUrlRange($this->lastPage?-?($window?+?2),?$this->lastPage); ????????}?else?{ ????????????$block['first']??=?$this->getUrlRange(1,?2); ????????????$block['slider']?=?$this->getUrlRange($this->currentPage?-?$side,?$this->currentPage?+?$side); ????????????$block['last']???=?$this->getUrlRange($this->lastPage?-?1,?$this->lastPage); ????????} ????????$html?=?''; ????????if?(is_array($block['first']))?{ ????????????$html?.=?$this->getUrlLinks($block['first']); ????????} ????????if?(is_array($block['slider']))?{ ????????????$html?.=?$this->getDots(); ????????????$html?.=?$this->getUrlLinks($block['slider']); ????????} ????????if?(is_array($block['last']))?{ ????????????$html?.=?$this->getDots(); ????????????$html?.=?$this->getUrlLinks($block['last']); ????????} ????????return?$html; ????} ????/** ?????*?渲染分頁html ?????*?@return?mixed ?????*/ ????public?function?render() ????{ ????????if?($this->hasPages())?{ ????????????if?($this->simple)?{ ????????????????return?sprintf( ????????????????????'
- %s?%s
‘, ????????????????????$this->getPreviousButton(), ????????????????????$this->getNextButton() ????????????????); ????????????}?else?{ ????????????????return?sprintf( ????????????????????‘
- %s?%s?%s
‘, ????????????????????$this->getPreviousButton(), ????????????????????$this->getLinks(), ????????????????????$this->getNextButton() ????????????????); ????????????} ????????} ????} ????/** ?????*?生成一個可點擊的按鈕 ?????* ?????*?@param??string?$url ?????*?@param??string?$page ?????*?@return?string ?????*/ ????protected?function?getAvailablePageWrapper(string?$url,?string?$page):?string ????{ ????????return?‘
‘; ????} ????/** ?????*?生成一個禁用的按鈕 ?????* ?????*?@param??string?$text ?????*?@return?string ?????*/ ????protected?function?getDisabledTextWrapper(string?$text):?string ????{ ????????return?‘
‘; ????} ????/** ?????*?生成一個激活的按鈕 ?????* ?????*?@param??string?$text ?????*?@return?string ?????*/ ????protected?function?getActivePageWrapper(string?$text):?string ????{ ????????return?‘
‘; ????} ????/** ?????*?生成省略號按鈕 ?????* ?????*?@return?string ?????*/ ????protected?function?getDots():?string ????{ ????????return?$this->getDisabledTextWrapper(‘…’); ????} ????/** ?????*?批量生成頁碼按鈕. ?????* ?????*?@param??array?$urls ?????*?@return?string ?????*/ ????protected?function?getUrlLinks(array?$urls):?string ????{ ????????$html?=?”; ????????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); ????} }
例如簡單修改上一頁下一頁為中文漢字,修改以下地方。
?
立即學習“PHP免費學習筆記(深入)”;
/** ?????*?上一頁按鈕 ?????*?@param?string?$text ?????*?@return?string ?????*/ ????protected?function?getPreviousButton(string?$text?=?"上一頁"):?string ????{ ????????if?($this->currentPage()?getDisabledTextWrapper($text); ????????} ????????$url?=?$this->url( ????????????$this->currentPage()?-?1 ????????); ????????return?$this->getPageLinkWrapper($url,?$text); ????} ????/** ?????*?下一頁按鈕 ?????*?@param?string?$text ?????*?@return?string ?????*/ ????protected?function?getNextButton(string?$text?=?'下一頁'):?string ????{ ????????if?(!$this->hasMore)?{ ????????????return?$this->getDisabledTextWrapper($text); ????????} ????????$url?=?$this->url($this->currentPage()?+?1); ????????return?$this->getPageLinkWrapper($url,?$text); ????}
然后根據自己的業務需求進行修改!