Yii2 分页类的扩展和listview引用
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." "."共".$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引用的更多相关文章
- Yii2中自带分页类实现分页
1.首先写控制器层 先引用pagination类 use yii\data\Pagination; 写自己的方法: function actionFenye(){ $data = Fie ...
- php+Mysql分页 类和引用详解
一下内容为专用于分页的类以及具体的方法和解析.<?php class Page { private $total; //数据表中总记录数 private $listRows; //每页显示行数 ...
- yii2分页的基本使用及其配置详解
作者:白狼 出处:http://www.manks.top/yii2_linkpager_pagination.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...
- php四个常用类封装 :MySQL类、 分页类、缩略图类、上传类;;分页例子;
Mysql类 <?php /** * Mysql类 */ class Mysql{ private static $link = null;//数据库连接 /** * 私有的构造方法 */ pr ...
- php大力力 [019节]php分页类的学习
2015-08-26 php大力力019.php分页类的学习 [2014]兄弟连高洛峰 PHP教程14.2.1 分页需求分析 14:18 [2014]兄弟连高洛峰 PHP教程14.2.2 分页类中分页 ...
- 一个重构的js分页类
// JavaScript Document /**//** * js分页类 * @param iAbsolute 每页显示记录数 * @param sTableId 分页表格属性ID值,为Strin ...
- 自定义MVC框架之工具类-分页类的封装
以前写过一个MVC框架,封装的有点low,经过一段时间的沉淀,打算重新改造下,之前这篇文章封装过一个验证码类. 这次重新改造MVC有几个很大的收获 >全部代码都是用Ubuntu+Vim编写,以前 ...
- python---django中自带分页类使用
请先看在学习tornado时,写的自定义分页类:思路一致: python---自定义分页类 1.基础使用: 后台数据获取: from django.core.paginator import Pagi ...
- PHP分页类代码
今天为大家献上一段代码,这是一段php分页代码: <?php//创建分页类class Page { private $_all_num; ...
随机推荐
- Linux应用开发环境搭建
因为笔者是一名大学生,对Linux内核开发方向非常感兴趣,可是实在是能(ji)力(shu)有(cha)限(jin),仅仅能从Linux应用开发開始,由浅入深,逐步进步,登上人生高峰,因此,昨天搭建了开 ...
- [MongoDB] Remove, update, create document
Remove: remove the wand with the name of "Doom Bringer" from our wandscollection. db.wands ...
- Enabling Active Directory Authentication for VMWare Server running on Linux《转载》
Enabling Active Directory Authentication for VMWare Server running on Linux Version 0.2 - Adam Breid ...
- jQuery之.html()和.text()区别
.html()//获取标签和内容 .text()//只获取内容
- 使用DataReader
string sqlStr="select * from tb_news"; SqlCommand myCmd=new SqlCommand(sqlStr,myConn); myC ...
- OkHttp 上手
OkHttp 上手 优点 快.节省带宽. 支持 HTTP/2 和 SPDY. HTTP/2 和 SPDY 允许对同一个主机的所有请求,使用一个 socket. 如果不支持 SPDY 的话,可以用连接池 ...
- Javascript判断空对象
最近在项目开发中判断空对象时,用了“!”运算符,结果程序出现bug,找了好久才找到原因. 其实自己范了一些低级错误,现在把自己经验总结一下: 在JavaScript中,任意JavaScript的值都可 ...
- redis的5种数据结构的简介
5种数据结构 1.字符串 Redis 字符串是一个字节序列.在 Redis 中字符串是二进制安全的,这意味着它们没有任何特殊终端字符来确定长度,所以可以存储任何长度为 512 兆的字符串. 示例 12 ...
- 16 Socket通信(简单例子)
服务端代码: import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Da ...
- 【android】java.net.ConnectException: localhost/127.0.0.1:8080 - Connection refused
调试中通过android simulator模拟器链接localhost或者127.0.0.1,因为我在电脑上面建立了apache,我的代码大概就是URL url = new URL(urlStrin ...