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