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 相关文章推荐
Windows中安装Apache2和PHP4权威指南
Nov 18 PHP
memcached 和 mysql 主从环境下php开发代码详解
May 16 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
Apr 10 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 PHP
PHP return语句另类用法不止是在函数中
Sep 17 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
Dec 25 PHP
php实现比较两个字符串日期大小的方法
May 12 PHP
PHP易混淆知识整理笔记
Sep 24 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
Dec 18 PHP
PHP中Notice错误常见解决方法
Apr 28 PHP
PHP实现模拟http请求的方法分析
Dec 20 PHP
PHP抽象类和接口用法实例详解
Jul 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
加速XP搜索功能堪比vista
2007/03/22 PHP
浅析linux下apache服务器的配置和管理
2013/08/10 PHP
PHP实现的memcache环形队列类实例
2015/07/28 PHP
laravel5创建service provider和facade的方法详解
2016/07/26 PHP
PHP设计模式之观察者模式定义与用法分析
2019/04/04 PHP
JQuery跨Iframe选择实现代码
2010/08/19 Javascript
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
JavaScript实现点击单元格改变背景色的方法
2016/02/12 Javascript
Vue.js Ajax动态参数与列表显示实现方法
2016/10/20 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
2016/12/11 Javascript
canvas绘制七巧板
2017/02/03 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
angular实现spa单页面应用实例
2017/07/10 Javascript
vue中使用localstorage来存储页面信息
2017/11/04 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
2020/07/11 Javascript
[01:29]Ti4循环赛第三日精彩回顾
2014/07/13 DOTA
python轻松实现代码编码格式转换
2015/03/26 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
2018/03/13 Python
基于python 爬虫爬到含空格的url的处理方法
2018/05/11 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
matlab、python中矩阵的互相导入导出方式
2020/06/01 Python
python 用pandas实现数据透视表功能
2020/12/21 Python
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
STP协议的主要用途是什么?为什么要用STP
2012/12/20 面试题
师范生个人推荐信
2013/11/29 职场文书
你懂得怎么写自荐信吗?
2013/12/27 职场文书
幼儿园毕业典礼主持词
2014/03/21 职场文书
就业意向书范文
2014/04/01 职场文书
欢迎词范文
2015/01/27 职场文书
2014年底个人工作总结
2015/03/10 职场文书