tp5 分頁詳解

最常用的應(yīng)該就是分頁了,tp5已經(jīng)將分頁給封裝好了,實在是方便!

分頁主要在model中查詢語句例使用paginate()函數(shù)。


tp5分頁的默認樣式很丑,或者說根本沒有樣式。

以下為修改方法(參考其他大神的擴展代碼):

1.首先在tp的擴展文件夾extend中創(chuàng)建page文件夾(文件夾名稱可以自己決定,命名空間對就行)

2. 將自定義分頁類文件page.php放到page文件夾下

? ??<?php

namespace page;

use think\Paginator;

class Page extends Paginator

{

? ? //首頁

? ? protected function home() {

? ? ? ? if ($this->currentPage() > 1) {

? ? ? ? ? ? return "<a href='" . $this->url(1) . "' title='首頁'>首頁</a>";

? ? ? ? } else {

? ? ? ? ? ? return "<p>首頁</p>";

? ? ? ? }

? ? }

? ? //上一頁

? ? protected function prev() {

? ? ? ? if ($this->currentPage() > 1) {

? ? ? ? ? ? return "<a href='" . $this->url($this->currentPage - 1) . "' title='上一頁'>上一頁</a>";

? ? ? ? } else {

? ? ? ? ? ? return "<p>上一頁</p>";

? ? ? ? }

? ? }

? ? //下一頁

? ? protected function next() {

? ? ? ? if ($this->hasMore) {

? ? ? ? ? ? return "<a href='" . $this->url($this->currentPage + 1) . "' title='下一頁'>下一頁</a>";

? ? ? ? } else {

? ? ? ? ? ? return"<p>下一頁</p>";

? ? ? ? }

? ? }

? ? //尾頁

? ? protected function last() {

? ? ? ? if ($this->hasMore) {

? ? ? ? ? ? return "<a href='" . $this->url($this->lastPage) . "' title='尾頁'>尾頁</a>";

? ? ? ? } else {

? ? ? ? ? ? return "<p>尾頁</p>";

? ? ? ? }

? ? }

? ? //統(tǒng)計信息

? ? protected function info(){

? ? ? ? return "<p class='pageRemark'>共<b>" . $this->lastPage .

? ? ? ? ? ? "</b>頁<b>" . $this->total . "</b>條數(shù)據(jù)</p>";

? ? }

? ? /**

? ? * 頁碼按鈕

? ? * @return string

? ? */

? ? protected function getLinks()

? ? {

? ? ? ? $block = [

? ? ? ? ? ? 'first'? => null,

? ? ? ? ? ? 'slider' => null,

? ? ? ? ? ? 'last'? => null

? ? ? ? ];

? ? ? ? $side? = 3;

? ? ? ? $window = $side * 2;

? ? ? ? if ($this->lastPage < $window + 6) {

? ? ? ? ? ? $block['first'] = $this->getUrlRange(1, $this->lastPage);

? ? ? ? } elseif ($this->currentPage <= $window) {

? ? ? ? ? ? $block['first'] = $this->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<div class="pagination">%s %s %s</div>',

? ? ? ? ? ? ? ? ? ? $this->css(),

? ? ? ? ? ? ? ? ? ? $this->prev(),

? ? ? ? ? ? ? ? ? ? $this->getLinks(),

? ? ? ? ? ? ? ? ? ? $this->next()

? ? ? ? ? ? ? ? );

? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? return sprintf(

? ? ? ? ? ? ? ? ? ? '%s<div class="pagination">%s %s %s %s %s %s</div>',

? ? ? ? ? ? ? ? ? ? $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 '<a href="' . htmlentities($url) . '" title="第"'. $page .'"頁" >' . $page . '</a>';

? ? }

? ? /**

? ? * 生成一個禁用的按鈕

? ? *

? ? * @param? string $text

? ? * @return string

? ? */

? ? protected function getDisabledTextWrapper($text)

? ? {

? ? ? ? return '<p class="pageEllipsis">' . $text . '</p>';

? ? }

? ? /**

? ? * 生成一個激活的按鈕

? ? *

? ? * @param? string $text

? ? * @return string

? ? */

? ? protected function getActivePageWrapper($text)

? ? {

? ? ? ? return '<a href="" class="cur">' . $text . '</a>';

? ? }

? ? /**

? ? * 生成省略號按鈕

? ? *

? ? * @return string

? ? */

? ? protected function getDots()

? ? {

? ? ? ? return $this->getDisabledTextWrapper('...');

? ? }

? ? /**

? ? * 批量生成頁碼按鈕.

? ? *

? ? * @param? array $urls

? ? * @return string

? ? */

? ? protected function getUrlLinks(array $urls)

? ? {

? ? ? ? $html = '';

? ? ? ? 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 '? <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>';

? ? }

}

3.修改配置文件(/application/config.php)

//分頁配置

? ? 'paginate'? ? ? ? ? ? ? => [

? ? ? ? 'type'? ? ? => 'bootstrap',

? ? ? ? 'var_page'? => 'page',

? ? ? ? 'list_rows' => 15,

? ? ],

將上面分頁配置改為:

? //自定義分頁配置?

? 'paginate'? ? ? ? ? ? ? => [?

? ? ? 'type'? ? ? => 'page\page',//分頁類?

? ? ? 'var_page'? => 'page',?

? ? ? 'list_rows' => 15,?

? ],


效果圖:

看下樣式要好很多,想要自己寫類文件也可以按照這種方法來做。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容