yii2分页之实现跳转到具体某页的实例代码
来源: 阅读:1122 次 日期:2016-08-18 14:54:07
温馨提示: 小编为您整理了“yii2分页之实现跳转到具体某页的实例代码”,方便广大网友查阅!

先上图看效果,大家感觉还错请参考功能怎么实现的!

名单

从上图中不难看出,我们制定跳转到某页的功能是基于linkpager之上的扩展,这根我们之前实现的分页扩展明显不同,之前的明显就是重写了!当然,这都不重要,我们看看GoLinkPager的具体实现!名字起的有点lower,不重要!

1、在frontend\components目录新建GoLinkPager类文件

2、该类继承yii\widgets\LinkPager;,如下:

namespace frontend\components;

use yii\widgets\LinkPager;

use yii\helpers\Html;

class GoLinkPager extends LinkPager

{

}

3、添加属性public $go = false; //是否包含跳转功能跳转 默认false

4、重写父类linkPager的renderPageButtons方法,具体直接参考下面完整版代码,可主要看go部分的代码实现。

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 = <<

共 {$pageCount} 页

到第

确定

goHtml;

$buttons[] = $goHtml;

$pageLink = $this->pagination->createUrl(false);

$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);

}

}

下面看具体使用:

'pagination' => $pages,

'go' => true,

]); ?>

可以看出,使用起来也是贼方便贼方便的!加一个属性go为true即可。

需要说明的是,完整版代码中go部分html js可根据自己需要自行修改整理!

以上内容是小编给大家介绍的yii2分页之实现跳转到具体某页的实例代码,希望对大家有所帮助!

更多信息请查看 网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们| 联系我们| 人才招聘| 网站声明| 网站帮助| 非正式的简要咨询| 简要咨询须知| 加入群交流| 手机站点| 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00) 版权所有:
云南网警报警专用图标
Baidu
map