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 相关文章推荐
初学者入门:细述PHP4的核心Zend
Sep 05 PHP
简单的用PHP编写的导航条程序
Oct 09 PHP
php判断字符以及字符串的包含方法属性
Aug 30 PHP
PHP三层结构(上) 简单三层结构
Jul 04 PHP
PHP函数eval()介绍和使用示例
Aug 20 PHP
php基于表单密码验证与HTTP验证用法实例
Jan 06 PHP
PHP信号量基本用法实例详解
Feb 12 PHP
PHP实现类似于C语言的文件读取及解析功能
Sep 01 PHP
PHP使用mongoclient简单操作mongodb数据库示例
Feb 08 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
Mar 25 PHP
php + WebUploader实现图片批量上传功能
May 06 PHP
PHP的介绍以及优势详细分析
Sep 05 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
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
php和mysql中uft-8中文编码乱码的几种解决办法
2012/04/19 PHP
php中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
基于PHP的简单采集数据入库程序【续篇】
2014/07/30 PHP
php检查日期函数checkdate用法实例
2015/03/19 PHP
jquery给图片添加鼠标经过时的边框效果
2013/11/12 Javascript
javascript中全局对象的parseInt()方法使用介绍
2013/12/19 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
JavaScript中的原型prototype属性使用详解
2015/06/05 Javascript
JavaScript截断字符串的方法
2015/07/15 Javascript
最简单的JavaScript图片轮播代码(两种方法)
2015/12/18 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
2016/07/07 Javascript
微信小程序 swiper组件详解及实例代码
2016/10/25 Javascript
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
2017/03/21 jQuery
使用vue.js写一个tab选项卡效果
2017/03/25 Javascript
微信小程序wx:for循环的实例详解
2018/10/07 Javascript
Vue使用自定义指令实现拖拽行为实例分析
2020/06/06 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
[04:11]2014DOTA2国际邀请赛 CIS遗憾出局梦想不灭
2014/07/09 DOTA
Python随机生成一个6位的验证码代码分享
2015/03/24 Python
Python学习笔记之Break和Continue用法分析
2019/08/14 Python
python cv2截取不规则区域图片实例
2019/12/21 Python
使用 Python ssh 远程登陆服务器的最佳方案
2020/03/06 Python
Python如何输出整数
2020/06/07 Python
Python命名空间及作用域原理实例解析
2020/08/12 Python
如何基于matlab相机标定导出xml文件
2020/11/02 Python
为娇小女性量身打造:Petite Studio
2018/11/01 全球购物
Linux开机引导的步骤是什么
2014/02/26 面试题
投资合作协议书
2014/04/17 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
中职毕业生自我鉴定
2014/09/13 职场文书
夫妻双方自愿离婚协议书怎么写
2014/12/01 职场文书
九寨沟导游词
2015/02/02 职场文书
复兴之路观后感3000字
2015/06/02 职场文书
实验心得体会范文
2016/01/25 职场文书