先上图看效果,大家感觉还错请参考功能怎么实现的!
从上图中不难看出,我们制定跳转到某页的功能是基于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分页之实现跳转到具体某页的实例代码,希望对大家有所帮助!