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仿ZOL分页类代码
Oct 02 PHP
PHP Curl出现403错误的解决办法
May 29 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
Jul 01 PHP
thinkphp中html:list标签传递多个参数实例
Oct 30 PHP
分享PHP计算两个日期相差天数的代码
Dec 23 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
Mar 21 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
May 30 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
Apr 08 PHP
php微信公众号开发之秒杀
Oct 20 PHP
php文件后缀不强制为.php的实操方法
Sep 18 PHP
laravel框架模型、视图与控制器简单操作示例
Oct 10 PHP
PHP7移除的扩展和SAPI
Mar 09 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进行微信公众平台开发的示例
2015/08/21 PHP
详谈php静态方法及普通方法的区别
2016/10/04 PHP
php+jQuery递归调用POST循环请求示例
2016/10/14 PHP
使用Zttp简化Guzzle 调用
2017/07/02 PHP
通过$(this)使用jQuery包装后的方法或属性
2014/05/18 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
Nodejs中解决cluster模块的多进程如何共享数据问题
2016/11/10 NodeJs
js实现滑动到页面底部自动加载更多功能
2017/02/15 Javascript
vue watch深度监听对象实现数据联动效果
2018/08/16 Javascript
Element Input组件分析小结
2018/10/11 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
2018/12/11 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
JavaScript ES6 Class类实现原理详解
2020/05/08 Javascript
python抓取网页时字符集转换问题处理方案分享
2014/06/19 Python
Python警察与小偷的实现之一客户端与服务端通信实例
2014/10/09 Python
对于Python中线程问题的简单讲解
2015/04/03 Python
Python发送email的3种方法
2015/04/28 Python
一个基于flask的web应用诞生(1)
2017/04/11 Python
Java分治归并排序算法实例详解
2017/12/12 Python
Python爬取qq空间说说的实例代码
2018/08/17 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
Jupyter Notebook折叠输出的内容实例
2020/04/22 Python
python 删除excel表格重复行,数据预处理操作
2020/07/06 Python
如何利用python 读取配置文件
2021/01/06 Python
详解使用HTML5 Canvas创建动态粒子网格动画
2016/12/14 HTML / CSS
介绍一下write命令
2014/08/10 面试题
精彩的演讲稿开头
2014/05/08 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
合伙购房协议样本
2014/10/06 职场文书
检讨书格式范文
2015/05/07 职场文书
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python