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 相关文章推荐
mysql 搜索之简单应用
Apr 27 PHP
56.com视频采集接口程序(PHP)
Sep 22 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
May 07 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
Jul 28 PHP
使用ob系列函数实现PHP网站页面静态化
Aug 13 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
Sep 10 PHP
PHP中使用array函数新建一个数组
Nov 19 PHP
PHP Cookei记录用户历史浏览信息的代码
Feb 03 PHP
php的debug相关函数用法示例
Jul 11 PHP
PHP 验证身份证是否合法的函数
Feb 09 PHP
thinkPHP框架实现的无限回复评论功能示例
Jun 09 PHP
php下的原生ajax请求用法实例分析
Feb 28 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
PHP输入流php://input介绍
2012/09/18 PHP
php IP转换整形(ip2long)的详解
2013/06/06 PHP
谈谈PHP连接Access数据库的注意事项
2016/08/12 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
jQuery技巧大放送 学习jquery的朋友可以看下
2009/10/14 Javascript
javascript判断用户浏览器插件安装情况的代码
2011/01/01 Javascript
原生js写的放大镜效果
2012/08/22 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
jQuery实现多按钮单击变色
2014/11/27 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
深入探讨前端框架react
2015/12/09 Javascript
AngualrJS中的Directive制作一个菜单
2016/01/26 Javascript
AngularJS教程之简单应用程序示例
2016/08/16 Javascript
微信小程序 加载 app-service.js 错误解决方法
2016/10/12 Javascript
seajs学习教程之基础篇
2016/10/20 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
JS根据Unix时间戳显示发布时间是多久前【项目实测】
2019/07/10 Javascript
JavaScript如何处理移动端拍摄图片旋转问题
2019/11/16 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
python学生管理系统开发
2019/01/30 Python
django如何通过类视图使用装饰器
2019/07/24 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
python中class的定义及使用教程
2019/09/18 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
HTML5在IE10、火狐下中文乱码问题的解决方法
2013/11/18 HTML / CSS
同步和异步有何异同,在什么情况下分别使用他们?举例说明
2014/02/27 面试题
项目管理计划书
2014/01/09 职场文书
房地产销售计划书
2014/01/10 职场文书
幼儿园教师自我鉴定
2014/03/20 职场文书
2014年党员自我评议总结
2014/09/23 职场文书
高三生物教学反思
2016/02/22 职场文书