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 相关文章推荐
ThinkPHP模板之变量输出、自定义函数与判断语句用法
Nov 01 PHP
php中call_user_func函数使用注意事项
Nov 21 PHP
PHP中SESSION的注销与清除
Apr 16 PHP
php导出中文内容excel文件类实例
Jul 06 PHP
postfixadmin忘记密码后的修改密码方法详解
Jul 20 PHP
PHP两种实现无级递归分类的方法
Mar 02 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 PHP
PHP堆栈调试操作简单示例
Jun 15 PHP
php5.6.x到php7.0.x特性小结
Aug 17 PHP
mac pecl 安装php7.1扩展教程
Oct 17 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
May 25 PHP
phpmyadmin在宝塔面板里进不去的解决方案
Jul 06 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 七大优势分析
2009/06/23 PHP
PHP中的print_r 与 var_dump 输出数组
2016/06/13 PHP
PHP 中使用ajax时一些常见错误总结整理
2017/02/27 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
2018/01/27 PHP
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
jQuery EasyUI NumberBox(数字框)的用法
2010/07/08 Javascript
Jquery 绑定时间实现代码
2011/05/03 Javascript
jquery.artwl.thickbox.js  一个非常简单好用的jQuery弹出层插件
2012/03/01 Javascript
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
jQuery .tmpl() 用法示例介绍
2014/08/21 Javascript
jQuery自带的一些常用方法总结
2014/09/03 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
基于JavaScript实现一定时间后去执行一个函数
2015/12/14 Javascript
分享JS数组求和与求最大值的方法
2016/08/11 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
javascript 取小数点后几位几种方法总结
2017/08/02 Javascript
常用的9个JavaScript图表库详解
2017/12/19 Javascript
微信小程序实现图片滚动效果示例
2018/12/05 Javascript
Vue仿微信app页面跳转动画效果
2019/08/21 Javascript
Nodejs封装类似express框架的路由实例详解
2020/01/05 NodeJs
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
使用python实现rsa算法代码
2016/02/17 Python
浅谈用Python实现一个大数据搜索引擎
2017/11/28 Python
python实现闹钟定时播放音乐功能
2018/01/25 Python
pandas series序列转化为星期几的实例
2018/04/11 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
Python PIL读取的图像发生自动旋转的实现方法
2019/07/05 Python
基于Python中random.sample()的替代方案
2020/05/23 Python
python获取本周、上周、本月、上月及本季的时间代码实例
2020/09/08 Python
eDreams巴西:廉价机票,酒店优惠和度假套餐
2017/04/14 全球购物
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
Mountain Warehouse德国官网:英国户外零售商
2019/08/11 全球购物
体育专业个人求职信范文
2013/12/27 职场文书
物业管理计划书
2014/01/10 职场文书
读书活动总结
2014/04/28 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书