先上圖看效果,大家感覺還錯請參考功能怎么實現的!
從上圖中不難看出,我們制定跳轉到某頁的功能是基于linkpager之上的擴展,這根我們之前實現的分頁擴展明顯不同,之前的明顯就是重寫了!當然,這都不重要,我們看看GoLinkPager的具體實現!名字起的有點lower,不重要!
1、在frontend\components目錄新建GoLinkPager類文件
2、該類繼承yii\widgets\LinkPager;,如下:
1
2
3
4
5
6
|
namespace frontend\components; use yii\widgets\LinkPager; use yii\helpers\Html; class GoLinkPager extends LinkPager { } |
3、添加屬性public $go = false; //是否包含跳轉功能跳轉 默認false
4、重寫父類linkPager的renderPageButtons方法,具體直接參考下面完整版代碼,可主要看go部分的代碼實現。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
<?php namespace frontend\components; use yii\widgets\LinkPager; use yii\helpers\Html; class GoLinkPager extends LinkPager { // 是否包含跳轉功能跳轉 默認false public $go = false; protected function renderPageButtons() { $pageCount = $this ->pagination->getPageCount(); if ( $pageCount < 2 && $this ->hideOnSinglePage) { return '' ; } $buttons = []; $currentPage = $this ->pagination->getPage(); // first page $firstPageLabel = $this ->firstPageLabel === true ? '1' : $this ->firstPageLabel; if ( $firstPageLabel !== false) { $buttons [] = $this ->renderPageButton( $firstPageLabel , 0, $this ->firstPageCssClass, $currentPage <= 0, false); } // prev page if ( $this ->prevPageLabel !== false) { if (( $page = $currentPage - 1) < 0) { $page = 0; } $buttons [] = $this ->renderPageButton( $this ->prevPageLabel, $page , $this ->prevPageCssClass, $currentPage <= 0, false); } // internal pages list( $beginPage , $endPage ) = $this ->getPageRange(); for ( $i = $beginPage ; $i <= $endPage ; ++ $i ) { $buttons [] = $this ->renderPageButton( $i + 1, $i , null, false, $i == $currentPage ); } // next page if ( $this ->nextPageLabel !== false) { if (( $page = $currentPage + 1) >= $pageCount - 1) { $page = $pageCount - 1; } $buttons [] = $this ->renderPageButton( $this ->nextPageLabel, $page , $this ->nextPageCssClass, $currentPage >= $pageCount - 1, false); } // last page $lastPageLabel = $this ->lastPageLabel === true ? $pageCount : $this ->lastPageLabel; if ( $lastPageLabel !== false) { $buttons [] = $this ->renderPageButton( $lastPageLabel , $pageCount - 1, $this ->lastPageCssClass, $currentPage >= $pageCount - 1, false); } // go if ( $this ->go) { $goPage = $currentPage + 2; $goHtml = <<<goHtml <div class = "form" style= "float: left; color: #999; margin-left: 10px; font-size: 12px;" > <span class = "text" >共 { $pageCount } 頁</span> <span class = "text" >到第</span> <input class = "input" type= "number" value= "{$goPage}" min= "1" max= "{$pageCount}" aria-label= "頁碼輸入框" style= "text-align: center; height: 25px; line-height: 20px; margin-top: 5px; width: 46px;" > <span class = "text" >頁</span> <span class = "btn go-page" role= "button" tabindex= "0" style= "border: solid 1px #ccc; padding: 0px; height: 25px; width: 46px; line-height: 25px;" >確定</span> </div> goHtml; $buttons [] = $goHtml ; $pageLink = $this ->pagination->createUrl(false); $goJs = <<<goJs $( ".go-page" ).on( "click" , function () { var _this = $(this), _pageInput = _this.siblings( "input" ), goPage = _pageInput.val(), pageLink = "{$pageLink}" ; pageLink = pageLink.replace( "page=1" , "page=" +goPage); if (goPage >= 1 && goPage <= { $pageCount }) { window.location.href=pageLink; } else { _pageInput.focus(); } }); goJs; $this ->view->registerJs( $goJs ); } return Html::tag( 'ul' , implode( "\n" , $buttons ), $this ->options); } } |
下面看具體使用:
1
2
3
4
|
<?= GoLinkPager::widget([ 'pagination' => $pages , 'go' => true, ]); ?> |
可以看出,使用起來也是賊方便賊方便的!加一個屬性go為true即可。
需要說明的是,完整版代碼中go部分html js可根據自己需要自行修改整理!
以上內容是小編給大家介紹的yii2分頁之實現跳轉到具體某頁的實例代碼,希望對大家有所幫助!