yii2分页之实现跳转到具体某页的实例代码


Posted in PHP onJune 02, 2016

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

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部分的代码实现。

<?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);
 }
}

下面看具体使用:

<?= GoLinkPager::widget([ 
 'pagination' => $pages, 
 'go' => true, 
]); ?>

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

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

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

PHP 相关文章推荐
PHP脚本数据库功能详解(中)
Oct 09 PHP
php 动态执行带有参数的类方法
Apr 10 PHP
php入门学习知识点三 PHP上传
Jul 14 PHP
php使用smtp发送支持附件的邮件示例
Apr 13 PHP
ThinkPHP查询中的魔术方法简述
Jun 25 PHP
php获取QQ头像并显示的方法
Dec 23 PHP
php实现网页缓存的工具类分享
Jul 14 PHP
浅析Yii2集成富文本编辑器redactor实例教程
Apr 25 PHP
PHP批量删除jQuery操作
Jul 23 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
PHP中PCRE正则解析代码详解
Apr 26 PHP
php操作redis数据库常见方法实例总结
Feb 20 PHP
[原创]php实现子字符串位置相互对调互换的方法
Jun 02 #PHP
PHP处理数组和XML之间的互相转换
Jun 02 #PHP
PHP邮箱验证示例教程
Jun 01 #PHP
PHP微信公众号自动发送红包API
Jun 01 #PHP
PHP模块化安装教程
Jun 01 #PHP
深入理解PHP之源码目录结构与功能说明
Jun 01 #PHP
基于PHP生成简单的验证码
Jun 01 #PHP
You might like
浅谈电磁辐射对健康的影响
2021/03/01 无线电
PHP清除字符串中所有无用标签的方法
2014/12/01 PHP
Laravel中unique和exists验证规则的优化详解
2018/01/28 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
2020/04/23 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
jquery animate 动画效果使用说明
2009/11/04 Javascript
javascript动画之圆形运动,环绕鼠标运动作小球
2010/07/20 Javascript
Ext 今日学习总结
2010/09/19 Javascript
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
2011/04/27 Javascript
js异常捕获方法介绍
2013/04/10 Javascript
JavaScript定义类的几种方式总结
2014/01/06 Javascript
基于JavaScript实现移动端无限加载分页
2017/03/27 Javascript
javascript实现对话框功能警告(alert 消息对话框)确认(confirm 消息对话框)
2019/05/07 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
微信小程序实现轨迹回放的示例代码
2019/12/13 Javascript
JS一次前端面试经历记录
2020/03/19 Javascript
Vuex的热更替如何实现
2020/06/05 Javascript
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
2015/05/06 Python
python执行子进程实现进程间通信的方法
2015/06/02 Python
django fernet fields字段加密实践详解
2019/08/12 Python
python求质数列表的例子
2019/11/24 Python
python3实现绘制二维点图
2019/12/04 Python
利用Python代码实现一键抠背景功能
2019/12/29 Python
Python使用Pandas库常见操作详解
2020/01/16 Python
python使用requests库爬取拉勾网招聘信息的实现
2020/11/20 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
CSS3 @font-face属性使用指南
2014/12/12 HTML / CSS
html5实现输入框fixed定位在屏幕最底部兼容性
2020/07/03 HTML / CSS
STAY JAPAN台湾:预订日本民宿
2018/07/22 全球购物
大专生自我鉴定范文
2013/10/01 职场文书
生物化学研究助理员求职信
2013/10/09 职场文书
魅力教师事迹材料
2014/01/10 职场文书
求职信的七个关键技巧
2014/02/05 职场文书
校园元旦活动总结
2014/07/09 职场文书
写给领导的感谢信
2015/01/22 职场文书