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 相关文章推荐
真正面向对象编程:PHP5.01发布
Oct 09 PHP
php 静态变量的初始化
Nov 15 PHP
按上下级层次关系输出内容的PHP代码
Jul 17 PHP
浅析php中抽象类和接口的概念以及区别
Jun 27 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
Sep 26 PHP
PHP中使用asort进行中文排序失效的问题处理
Aug 18 PHP
PHP设计模式之适配器模式代码实例
May 11 PHP
浅谈PHP中如何实现Hook机制
Nov 14 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
Nov 21 PHP
PHP数字金额转换成中文大写显示
Jan 05 PHP
thinkphp5框架API token身份验证功能示例
May 21 PHP
PHP+Apache实现二级域名之间共享cookie的方法
Jul 24 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
一个连接两个不同MYSQL数据库的PHP程序
2006/10/09 PHP
20款超赞的jQuery插件 Web开发人员必备
2011/02/26 Javascript
在标题栏显示新消息提示,很多公司项目中用到这个方法
2011/11/04 Javascript
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
js定时调用方法成功后并停止调用示例
2014/04/08 Javascript
javascript实现的网站访问量统计代码
2015/12/20 Javascript
详解Angular中$cacheFactory缓存的使用
2016/08/19 Javascript
jQuery中的select操作详解
2016/11/29 Javascript
浅谈基于Vue.js的移动组件库cube-ui
2017/12/20 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
浅谈Webpack多页应用HMR卡住问题
2019/04/24 Javascript
使用p5.js实现动态GIF图片临摹重现
2019/10/23 Javascript
js实现坦克移动小游戏
2019/10/28 Javascript
基于JavaScript实现简单的轮播图
2021/03/03 Javascript
[01:32:50]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第一场 1月25日
2021/03/11 DOTA
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
Python获取远程文件大小的函数代码分享
2014/05/13 Python
Python做简单的字符串匹配详解
2017/03/21 Python
Python子类继承父类构造函数详解
2019/02/19 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
2019/04/11 Python
Pytorch实现GoogLeNet的方法
2019/08/18 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
2020/01/03 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
卫校毕业生自我鉴定
2013/10/31 职场文书
行政助理岗位职责范文
2013/12/03 职场文书
诚信贷款承诺书
2014/05/30 职场文书
英语系本科生求职信
2014/07/15 职场文书
党员个人对照检查材料
2014/10/01 职场文书
社区班子个人对照检查材料思想汇报
2014/10/07 职场文书
2015入党自荐书范文
2015/03/05 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
2016年中学清明节活动总结
2016/04/01 职场文书
Vue接口封装的完整步骤记录
2021/05/14 Vue.js
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python