Yii2 本身提供了不错分页选项供用户设置,但是实际项目中我们往往需要复杂一些的分页样式,例如下图所示的效果,上下翻页可用和不可用均用图标来替换。

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA78AAAA/CAIAAACn2uiIAAAFfUlEQVR4nO3dsW7bRhzAYb+InqEvoffIrKfIGyiD9yBAkDVCOtRL0CUwwFUBOnnqUCAx4Axy2iUI1EG2dCJ1xz9JJYyl74OHKNCdWBE5/XAm1Yt/AACAjO/f7tOfizUAAJChngEAIEo9AwBAlHoGAIAo9QwAAFHqGQAAopJ0/vr921f1DAAAWWk6q2cAAChJ01k9AwBASZrO6hkAAErUMwAARKlnAACIUs8AABClngEAIEo9AwBAlHoGAIAo9QwAAFHqGQAAotQzAABEqWcAAIhSzwAAEKWeAQAgSj0D4/j8+XNVVdcdVVX16dOn407CQE4lcFbUMzCOqqpWq1XXUff391VVHXcSBnIqgWNYzqfT+TJ9OFv8wNeaTPpO//3bv+mPegZ+kuvr6+EDjzIJAzmVcK6W8+nkQaFEF7NJIv/EaD3Xntd2HMv5dDLZH7B/RJFj26OegXE8ieT6/c/1s2X705rSpbnX7sZugtqHRJ95uh9B7aOlPMGTOJXA0S1m29VhMSssVotZeSFL2jdnuwg9PHdvvvJxbJaz5C8Xs8lkOq0F+HI+ja+26hkYx6+eXH+vf3u7vnjbq54Xs91S3ytfF7PHEYN+u/j4OdOrnuPV/qufSuBH2O/NUn1GF5TWveeHTN6fr3wcy/l0Opvt/m43dru6HtibbqGegXH80sm1XF/8sf5rvX7Wr573JdsiPXTaEDkwdNqrvtUz0KK2TORXuuV8GluFoldu7L9y6Tg2L51dRh9/y9Z1jVXPwDhy0XN3d1d4uO6YXM3hwYEbT7meHwb2evVuL5p7M6+uruIDm5PUhudmU88wigObvIV6Dl0H1queC8fx+MfdU2rXiOz9km+rffFTz8A4DkbP3d3dzc1N7mFzYLmcDg6PDNw6Qj0Pu/Sid3pvPy1613N8UO7NfP78+fv374MDm5PUhudmU88wing9J4qXRx+5nncHVL6qpMf2hHoGxtGMnk3sbnu39vDgwEI55Ya3DkwNrufFrN99f9udkH4XbSSfUL3qee+mwdZDyL2Zl5eXL168KAR0+VTWhudmU88wjswVE+k+7uHvv8h/X0ZB7aVar9xIl779F81930b73viWegbGUYueL1++3DxqPswNzJVTYXh5YM2gem7c6N1H99tZasE87LqR0AHk3syXL1++efOmENDlU1kbnptNPcM4mnfrBZaaAXdy7LTdNfgQz6E0tvcMPCG16NluFW96t/YwN7Bw8fS49bzZTBn8GbFerzv3b24fZ9AXdxT/S3Jv5qtXr969e/f69esPHz60DmxOUhuem009w0jS69JK69RymaZtaTmpbxhnpqztNrcex+EN783THuq52zqrnoFxnPKVGz2/ZDk/24AMH7r3PLiedx+cxYG5et4Oz82mnmE8uy3ewjJTvpYjfc50vlyn/8gz+xDNRbF8HLVFLL34OrnUusOmh3oGxnHCdw0e4WKJ3fDyTTY/6GCSj6/AXY+FKzc+fvwYHHjwyo10eG429QxPXMt+w8Bbr5uTbVbUbXDvTR27AEU9A+M44W+sO3TBXbelP92qGXj5R+/v3Igfeu7NrKoqPrA5SW14bjb1DPxk6hkYh//FxslwKoGzop6BcUiuk+FUAmdFPQPjkFwnw6kEzop6BsYhuU6GUwmcFfUMjKOqqtVq1XXUarVK7x47yiQM5FQCZ+Wxm//b/Khn4Ce5vb2tquq6o6qqbm9vjzsJAzmVwFlRzwAAEKWeAQAgSj0DAECUegYAgCj1DAAAUeoZAACi1DMAAESpZwAAiFLPAAAQpZ4BACBKPQMAQJR6BgCAqDSd1TMAAJSk6ayeAQCgRD0DAECUegYAgCj1DAAAUeoZAACi1DMAAESpZwAAiKrV8//mPp/MGB+NxgAAAABJRU5ErkJggg==" alt="" />

步骤如下:

1 , 查看项目分页组件,一般位于项目\vendor\yiisoft\yii2\widgets\LinkPager.php位置,

2,在\vendor\yiisoft\yii2\widgets\目录下新建组件tLinkPager.php,继承LinkPager.php,代码和注释如下:

  主要是重写了renderPageButtons()方法,实现了2个功能:

1)生成first prev next last四个链接 根据是否可点击(disabled)来加载不同的图片

   2)添加总条数和当前显示条数label

<?php

namespace yii\widgets;

use Yii;
use yii\base\InvalidConfigException;
use yii\helpers\Html;
use yii\base\Widget;
use yii\data\Pagination; class tLinkPager extends LinkPager{ public $firstPageLabel= '<img src="/web/image/first.png">';
public $lastPageLabel= '<img src="/web/image/last.png">';
public $nextPageLabel= '<img src="/web/image/next.png">';
public $prevPageLabel='<img src="/web/image/pre.png">'; public $firstPageLabel1= '<img src="/web/image/first1.png">';
public $lastPageLabel1= '<img src="/web/image/last1.png">';
public $nextPageLabel1= '<img src="/web/image/next1.png">';
public $prevPageLabel1='<img src="/web/image/pre1.png">'; public $maxButtonCount = 5; public $options = ['class' => 'm_pagination']; /**
* Renders the page buttons.
* 生成按钮列表,用自定义图片进行替换
* @return string the rendering result
*/
protected function renderPageButtons()
{
$pageCount = $this->pagination->getPageCount();
if ($pageCount < 2 && $this->hideOnSinglePage) {
return '';
} $buttons = [];
$currentPage = $this->pagination->getPage(); //生成first prev next last四个链接 根据是否可点击(disabled)来加载不同的图片
// first page
if ($this->firstPageLabel !== false) {
$buttons[] = $this->renderPageButton(($currentPage <= 0)?$this->firstPageLabel1:$this->firstPageLabel, 0,
$this->firstPageCssClass, $currentPage <= 0, false);
} // prev page
if ($this->prevPageLabel !== false) {
if (($page = $currentPage - 1) < 0) {
$page = 0;
}
$buttons[] = $this->renderPageButton(($currentPage <= 0)?$this->prevPageLabel1:$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(($currentPage >= $pageCount - 1)?$this->nextPageLabel1:$this->nextPageLabel, $page,
$this->nextPageCssClass, $currentPage >= $pageCount - 1, false);
} // last page
if ($this->lastPageLabel !== false) {
$buttons[] = $this->renderPageButton(($currentPage >= $pageCount - 1)?$this->lastPageLabel1:$this->lastPageLabel, $pageCount - 1,
$this->lastPageCssClass, $currentPage >= $pageCount - 1, false);
} //添加文字 add by 16/10/24
//获取每页数量
$pagesize = $this->pagination->getPageSize(); $label=$currentPage*$pagesize."-".($currentPage+1)*$pagesize."&nbsp;"."共".$this->pagination->totalCount."条"; //添加总条数和当前显示条数label
$buttons[]=Html::tag('li', Html::tag('span', $label)); return Html::tag('ul', implode("\n", $buttons), $this->options);
} }

3 在视图中引用,首先在引用该组件 use yii\widgets\vodLinkPager;

其次使用时直接输出<?php  echo vodLinkPager::widget([  'pagination' =>$pagination,   ]);?>即可

4 listview 或girdview 如何引用 ,首先在引用该组件 use yii\widgets\vodLinkPager;

其次输出时添加选项'pager'=>['class'=>vodLinkPager::className(),],即可 示例如下

<?php
ListView::begin([
'dataProvider'=>$dataProvider,
'viewParams'=>['clist'=>$clist],
'itemView'=>'vitem',
'layout'=>'{items}<div class="t-m-pager">{pager}</div>',
//添加下面这句即可
'pager'=>['class'=>vodLinkPager::className(),],
]);
ListView::end(); ?>

5 部分CSS 如下:

.m_pagination{
display: inline-block;
padding-left:;
margin: 20px 0;
border-radius: 4px;
width: 100%;
}
.m_pagination li{
display: inline;
}
.m_pagination > li > a, .m_pagination > li > span {
position: relative;
margin-left: -1px;
line-height: 1.42857143;
color: #1d1d1d;
text-decoration: none;
background-color: #fff;
}
.m_pagination > li > a{
padding: 0px 5px;
}
.m_pagination > li.next a, .m_pagination > li.last a,.m_pagination > li.first a, .m_pagination > li.prev a{
padding: 0px;
}
.m_pagination > li.active a{
color: var(--niceblue);
}
.m_pagination > li:nth-last-child(1) span{
float: right;
margin-right: 5px;
font-size: 13px;
position: absolute;
right: 5px;
} .t-m-pager
{
right: 0px;
position: relative;
text-align: center;
color: var(--niceblue);
}

Yii2 分页类的扩展和listview引用的更多相关文章

  1. Yii2中自带分页类实现分页

    1.首先写控制器层 先引用pagination类 use yii\data\Pagination; 写自己的方法: function actionFenye(){        $data = Fie ...

  2. php+Mysql分页 类和引用详解

    一下内容为专用于分页的类以及具体的方法和解析.<?php class Page { private $total; //数据表中总记录数 private $listRows; //每页显示行数 ...

  3. yii2分页的基本使用及其配置详解

    作者:白狼 出处:http://www.manks.top/yii2_linkpager_pagination.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...

  4. php四个常用类封装 :MySQL类、 分页类、缩略图类、上传类;;分页例子;

    Mysql类 <?php /** * Mysql类 */ class Mysql{ private static $link = null;//数据库连接 /** * 私有的构造方法 */ pr ...

  5. php大力力 [019节]php分页类的学习

    2015-08-26 php大力力019.php分页类的学习 [2014]兄弟连高洛峰 PHP教程14.2.1 分页需求分析 14:18 [2014]兄弟连高洛峰 PHP教程14.2.2 分页类中分页 ...

  6. 一个重构的js分页类

    // JavaScript Document /**//** * js分页类 * @param iAbsolute 每页显示记录数 * @param sTableId 分页表格属性ID值,为Strin ...

  7. 自定义MVC框架之工具类-分页类的封装

    以前写过一个MVC框架,封装的有点low,经过一段时间的沉淀,打算重新改造下,之前这篇文章封装过一个验证码类. 这次重新改造MVC有几个很大的收获 >全部代码都是用Ubuntu+Vim编写,以前 ...

  8. python---django中自带分页类使用

    请先看在学习tornado时,写的自定义分页类:思路一致: python---自定义分页类 1.基础使用: 后台数据获取: from django.core.paginator import Pagi ...

  9. PHP分页类代码

    今天为大家献上一段代码,这是一段php分页代码: <?php//创建分页类class Page {    private $_all_num;                           ...

随机推荐

  1. Spring事务管理器分类

    Spring并不直接管理事务,事实上,它是提供事务的多方选择.你能委托事务的职责给一个特定的平台实现,比如用JTA或者是别的持久机制.Spring的事务管理器可以用下表表示: 事务管理器的实例 目标 ...

  2. js iframe 跳转

    iframe 页面内操作: //iframe指向指定页面 parent.document.getElementById("hot").src = $("#hidPageU ...

  3. 使用IDEA动态调试smali代码

    原创,转载请注明出处. 一般java ide(如eclipse.idea)都可用来进行smali的动态调试,这里选择IDEA. 第1步:使用apktool反编译apk java -jar apktoo ...

  4. servlet下载,解决文件名中有中文下载路径出现乱码不能正常下载问题

    方法很多种,我只试用了两种. 主页面JSP中引入下载功能所需的js文件.引入的时候设置编码格式例如 <script type="text/javascript" charse ...

  5. C# IoC 容器

    Unity是Unity是微软patterns& practices组用C#实现的轻量级,可扩展的依赖注入容器,它为方便开发者建立松散耦合的应用程序, 有以下优点: 1.简化了对象的创建,特别是 ...

  6. c++11 线程:让你的多线程任务更轻松

      介绍 本文旨在帮助有经验的Win32程序员来了解c++ 11线程库及同步对象 和 Win32线程及同步对象之间的区别和相似之处. 在Win32中,所有的同步对象句柄(HANDLE)是全局句柄.它们 ...

  7. (转)WCF中调用WebService出错,大家帮忙看看,回答就有分

    http://bbs.csdn.net/topics/390542345 在WCF项目里面添加了一个WebService引用,然后在我们调用这个WCF服务时,老出错,提示在 ServiceModel  ...

  8. Jquery:强大的选择器<二>

    今天跟着资料做了一个示例,为什么我感觉自己做的没书上的好看呢?好吧,我承认自己对css样式只懂一点皮毛,我也不准备深度的去学习它,因为……公司有美工嘛! 这个小示例只是实现了元素的隐藏和显示.元素cl ...

  9. Solr导入数据库数据

    接Solr-4.10.2与Tomcat整合.1.在solrconfig.xml中添加数据导入节点,solrconfig.xml路径为D:\solr\data\solr\collection1\conf ...

  10. js中的因数分解

    方法一: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8& ...