最近在用phalcon写一个支持多国语言的cms,不太喜欢phalcon的分页,所以自己写了个分页工具类。
该分页类支持自动获取解析url,还支持高度自定义
例如:
- 自定义分页参数名
- 自定义选中页、禁用页的class值
- 自定义首页、上一页、左边页、当前页、右边页、下一页、后缀
- 自定义各按钮位置
- 自定义左边或右边显示按钮个数
- 自定义替换规则
- 自定义是否显示无效按钮(首页、上一页、下一页、尾页)
。。。
默认第一页
自动识别检测url
支持多种分页方式混用
分页类文件Paginator.php
<?php
/**
* @desc 分页类
* @author: ZhaoYang
* @date: 2018年7月20日 下午10:07:11
* <pre>
* use Library\Tools\Paginator;
* 方法1:
* $paginator1 = new Paginator(100);
echo $paginator1->show();
方法2:
$config2 = [
'page' => 'p',
'pagePattern' => '/([\/&?]p[\/=])([\d]+)/',
'prevTheme' => '<a {href}><li class="{class}">上一页</li></a>',
'nextTheme' => '<a {href}><li class="{class}">下一页</li></a>',
'suffixTheme' => '<li class="totalPage">共<span>{totalPages}</span>页 当前第<span>{nowPage}</span>页</li>',
'showTheme' => '<ul class="pageMenu clearfix">{getSuffixPage}{getFirstLinkPage}{getPrevLinkPage}{getLeftLinkPage}{getNowLinkPage}{getRightLinkPage}{getNextLinkPage}{getLastLinkPage}</ul>'
];
$paginator2 = new Paginator(100, 7, null, $config2);
echo $paginator2->show();
方法3:
$config3 = [
'page' => 'pa',
'pagePattern' => '/([\/&?]pa[\/=])([\d]+)/',
'suffixTheme' => '<li class="totalPage">共<span>{totalPages}</span>页 当前第<span>{nowPage}</span>页</li>',
'showTheme' => '{getFirstLinkPage}{getPrevLinkPage}{getLeftLinkPage}{getNowLinkPage}{getRightLinkPage}{getNextLinkPage}{getLastLinkPage}{getSuffixPage}',
'isShowDisabled' => false
];
$paginator3 = new Paginator(100, 5, null, $config3);
echo $paginator3->show();
echo $paginator3->getLimit() . '<br>';
echo $paginator3->getLimit(true) . '<br>';
echo $paginator3->getOffset() . '<br>';
* </pre>
*/
namespace Library\Tools;
class Paginator {
// 分页参数名
protected $page = 'page';
// url中分页正则
protected $pagePattern = '/([\/&?]page[\/=])([\d]+)/';
// url
protected $url = null;
// url模板
protected $urlTheme = null;
// href
protected $href = null;
// href模板
protected $hrefTheme = 'href="{urlTheme}"';
// 禁用页class值
protected $disabled = 'disabled';
// 选中页class值
protected $active = 'active';
// 第一页模板
protected $firstTheme = '<a {href}><li class="{class}">首页</li></a>';
// 上一页模板
protected $prevTheme = '<a {href}><li class="{class}"><</li></a>';
// 当前页模板
protected $nowTheme = '<a><li class="{class}">{nowPage}</li></a>';
// 其它页模板
protected $otherTheme = '<a {href}><li class="{class}">{otherPage}</li></a>';
// 下一页模板
protected $nextTheme = '<a {href}><li class="{class}">></li></a>';
// 最后一页模板
protected $lastTheme = '<a {href}><li class="{class}">尾页</li></a>';
// 后缀模板
protected $suffixTheme = '<li class="totalPage">共<span>{totalPages}</span>页 </li>';
// protected $suffixTheme = '<li class="totalPage">共<span>{totalPages}</span>页 当前<span>{nowPage}</span>页 </li>';
// 当前页左边显示$otherTheme的个数
protected $leftSideAmount = 3;
// 当前页右边显示$otherTheme的个数
protected $rightSideAmount = 3;
// 总记录数
protected $totalRows = 0;
// 每页显示的行数
protected $listRows = 10;
// 总页数
protected $totalPages = 0;
// 起始页码
protected $startPage = 1;
// 当前页码
protected $nowPage = 1;
// 展示的模板
protected $showTheme = '{getFirstLinkPage}{getPrevLinkPage}{getLeftLinkPage}{getNowLinkPage}{getRightLinkPage}{getNextLinkPage}{getLastLinkPage}{getSuffixPage}';
// 生成各部分时替换,当存在该属性时则替换成属性值,若该属性不存在,但存在该方法,则替换成该方法返回值,否则替换为当前设置的值
protected $replaceRule = [
// '{url}' => 'url', // 动态变化
'{urlTheme}' => 'urlTheme',
'{href}' => 'href', // 动态变化
'{class}' => 'class', // 动态变化
'{nowPage}' => 'nowPage',
'{otherPage}' => 'otherPage', // 动态变化
'{totalPages}' => 'totalPages',
'{getFirstLinkPage}' => 'getFirstLinkPage',
'{getPrevLinkPage}' => 'getPrevLinkPage',
'{getLeftLinkPage}' => 'getLeftLinkPage',
'{getNowLinkPage}' => 'getNowLinkPage',
'{getRightLinkPage}' => 'getRightLinkPage',
'{getNextLinkPage}' => 'getNextLinkPage',
'{getLastLinkPage}' => 'getLastLinkPage',
'{getSuffixPage}'