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
基于文本的搜索
Oct 09 PHP
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
Aug 09 PHP
PHP在线生成二维码代码(google api)
Jun 03 PHP
保存到桌面、设为桌面且带图标的PHP代码
Nov 19 PHP
php使用PDO方法详解
Dec 27 PHP
php+mysql删除指定编号员工信息的方法
Jan 14 PHP
php读取der格式证书乱码解决方法
Jun 22 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
Oct 08 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
May 17 PHP
Laravel 集成 Geetest验证码的方法
May 14 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
Apr 02 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 异步执行方法,模拟多线程的应用分析
2013/06/03 PHP
ThinkPHP学习笔记(一)ThinkPHP部署
2014/06/22 PHP
Yii2 assets清除缓存的方法
2016/05/16 PHP
php实现微信公众号企业转账功能
2018/10/01 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
JavaScript开发人员的10个关键习惯小结
2014/12/05 Javascript
javascript中数组的定义及使用实例
2015/01/21 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
jQuery实现垂直半透明手风琴特效代码分享
2015/08/21 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
angular.JS实现网页禁用调试、复制和剪切
2017/03/31 Javascript
微信小程序 wx:for的使用实例详解
2017/04/27 Javascript
原生js轮播特效
2017/05/18 Javascript
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
2017/06/09 Javascript
微信小程序之网络请求简单封装实例详解
2017/06/28 Javascript
Vue-Router的使用方法
2018/09/05 Javascript
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
2018/12/11 jQuery
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
通过mod_python配置运行在Apache上的Django框架
2015/07/22 Python
使用FastCGI部署Python的Django应用的教程
2015/07/22 Python
关于Django显示时间你应该知道的一些问题
2017/12/25 Python
django自定义模板标签过程解析
2019/12/14 Python
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
一名女生的自荐信
2013/12/08 职场文书
新郎父亲婚宴答谢词
2014/01/11 职场文书
小学毕业家长寄语
2014/01/19 职场文书
初中英语演讲稿
2014/04/29 职场文书
企业年度评优方案
2014/06/02 职场文书
政府法律服务方案
2014/06/14 职场文书
2014年机关工会工作总结
2014/12/19 职场文书
2015清明节祭奠英烈寄语大全
2015/03/04 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
中国汉字听写大会观后感
2015/06/02 职场文书
中秋晚会致辞
2015/07/31 职场文书