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 相关文章推荐
elgg 获取文件图标地址的方法
Mar 20 PHP
discuz程序的PHP加密函数原理分析
Aug 05 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
Jan 07 PHP
PHP判断一个字符串是否是回文字符串的方法
Mar 23 PHP
PHP中的Session对象如何使用
Sep 25 PHP
php数字每三位加逗号的功能函数
Oct 22 PHP
PHP实现Session入库/存入redis的方法
May 04 PHP
Laravel5.7 Eloquent ORM快速入门详解
Apr 12 PHP
php文件上传原理与实现方法详解
Dec 20 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
Jan 26 PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 PHP
php实例化对象的实例方法
Nov 17 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
一个ftp类(ini.php)
2006/10/09 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
php输出形式实例整理
2020/05/05 PHP
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
2012/01/04 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
node.js中cluster的使用教程
2017/06/09 Javascript
jquery在启动页面时,自动加载数据的实例
2018/01/22 jQuery
基于iScroll实现内容滚动效果
2018/03/21 Javascript
vue2.0的虚拟DOM渲染思路分析
2018/08/09 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
jquery实现动态添加附件功能
2018/10/23 jQuery
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
vue打包通过image-webpack-loader插件对图片压缩优化操作
2020/11/12 Javascript
[40:16]TFT vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python sys模块sys.path使用方法示例
2013/12/04 Python
Python面向对象之反射/自省机制实例分析
2018/08/24 Python
Python print不能立即打印的解决方式
2020/02/19 Python
django admin后管定制-显示字段的实例
2020/03/11 Python
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
北美主要的汽车零部件零售商:AutoShack.com
2019/02/23 全球购物
Prototype如何为一个Ajax添加一个参数
2015/12/06 面试题
中学老师的自我评价
2013/11/07 职场文书
物业保安员岗位职责制度
2014/01/30 职场文书
2014年学生工作总结
2014/11/20 职场文书
2015年超市工作总结
2015/04/09 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
医务人员岗前培训心得体会
2016/01/08 职场文书
教你使用Python pypinyin库实现汉字转拼音
2021/05/27 Python
Java spring单点登录系统
2021/09/04 Java/Android