ThinkPHP5 另類方法實現分頁功能
- 2019 年 12 月 30 日
- 筆記
前言
當然是自己需要這個功能啦。。。
準備
我所用的前端框架是老外用BootStrap4二開的主題,叫MaterialPro(以下簡稱MP),我會在本文末附上壓縮包。非常好用哦。
傳統的分頁是使用ul li來做,但是最大的問題就是如果沒有正好的樣式,那麼你還得費大半天時間去寫樣式,煩得很。所以我這次使用的是MP的按鈕組,美觀也好看。
實現方法
分頁實現是用的TP5自帶的paginate方法,在Model里查詢數據的時候直接使用該方法進行分頁。然後將對象返回過來就好。
注意:官方文檔寫的是使用render方法來分頁,但是在這裡我們不用這個方法,因為他在我這有各種BUG。
將數據對象返回過來之後,var_dump之後結構是這樣的(這裡只發出來跟分頁有關的數據結構)
protected 'currentPage' => int 1 protected 'lastPage' => int 1 protected 'total' => int 4 protected 'listRows' => int 10 protected 'hasMore' => boolean false protected 'options' => array (size=6) 'var_page' => string 'page' (length=4) 'path' => string '/index/index/charge' (length=19) 'query' => array (size=0) empty 'fragment' => string '' (length=0) 'type' => string 'bootstrap' (length=9) 'list_rows' => int 15 protected 'nextItem' => null
提示:這裡很多人會誤認為total是總頁數,其實是錯誤的,total是數據總條數。
接下來就是前端了,很easy,我直接把代碼貼上來你們讀一下就懂了
<div class="float-right"> {if $record->currentPage()>1} <button id="pre" type="button" class="btn btn-secondary" data-page="/index/index/charge?page={$record->currentPage()-1}">上一頁</button> {/if} <div class="btn-group" role="group"> {for start="1" end="$record->lastPage()+1" name="page"} <button type="button" class="pages btn {if $page==$record->currentPage()}btn-info{else /}btn-secondary{/if}" data-page="/index/index/charge?page={$page}">{$page}</button> {/for} </div> {if $record->currentPage()<$record->lastPage()} <button id="af" type="button" class="btn btn-secondary" data-page="/index/index/charge?page={$record->currentPage()+1}">下一頁</button> {/if} </div> <!--這裡寫分頁代碼-->
以及js代碼
$('#pre').on('click',function () { window.location.href = $(this).attr('data-page'); }); $('#af').on('click',function () { window.location.href = $(this).attr('data-page'); }); $('.pages').on('click',function () { window.location.href = $(this).attr('data-page'); });