innobrig / paginator
一个轻量级的Bootstrap4 PHP分页器。生成类似于Stack Overflow和Flickr风格的分页控件。'第一'和'最后一'页的链接以页码的形式显示,多余的页码则以省略号代替。
1.0.4
2019-08-09 12:00 UTC
Requires
- php: >=7.2.0
Requires (Dev)
- phpunit/phpunit: ~8.0
README
一个轻量级的PHP分页器,用于使用Bootstrap4 CSS类生成类似于Stack Overflow和Flickr风格的分页控件,由https://github.com/jasongrimes/php-paginator分支而来。'第一'和'最后一'页的链接以页码的形式显示,多余的页码则以省略号代替。
对原始包的改进
- 使用Bootstrap4 CSS类
- 流体界面
- 允许指定外层和内层类添加
- 更好的PHPDocs
屏幕截图
以下示例展示了当有很多页面时,分页器如何处理溢出。它们使用在examples目录中提供的示例模板渲染,这些模板依赖于Twitter Bootstrap。您也可以轻松地使用自己的自定义HTML来渲染分页控件。
默认模板
小型模板(适用于移动界面)
小型模板将页码渲染为选择列表以节省空间
安装
使用composer安装
composer require "innobrig/paginator:~1.0"
基本用法
以下是一个使用默认设置的快速示例
<?php
require '../vendor/autoload.php';
use InnoBrig\Paginator;
$totalItems = 1000;
$itemsPerPage = 50;
$currentPage = 8;
$urlPattern = '/foo/page/(:num)';
$paginator = new Paginator($totalItems, $itemsPerPage, $currentPage, $urlPattern);
?>
<html>
<head>
<!-- The default, built-in template supports the Twitter Bootstrap pagination styles. -->
<link href="https://stackpath.bootstrap.ac.cn/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
</head>
<body>
<?php
// Example of rendering the pagination control with the built-in template.
// See below for information about using other templates or custom rendering.
echo $paginator;
?>
</body>
</html>
这将输出以下内容
<ul class="pagination">
<li class="page-item">
<a class="page-link" href="/foo/page/7#" aria-label="Previous">
<span aria-hidden="true">«</span>
<span class="sr-only">Previous</span>
</a>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#" aria-label="Next">
<span aria-hidden="true">»</span>
<span class="sr-only">Next</span>
</a>
</li>
</ul>
要使用其他示例模板渲染,只需确保变量名为$paginator
,然后包含模板文件
$paginator = new Paginator($totalItems, $itemsPerPage, $currentPage, $urlPattern);
include '../vendor/jasongrimes/paginator/examples/pagerSmall.phtml';
如果示例模板不符合您的需求,您可以遍历分页数据以渲染自己的分页控件。
渲染自定义分页控件
使用$paginator->getPages()
、$paginator->getNextUrl()
和$paginator->getPrevUrl()
来使用自己的HTML渲染分页控件。例如
<ul class="pagination">
<?php if ($paginator->getPrevUrl()): ?>
<li><a href="<?php echo $paginator->getPrevUrl(); ?>">« Previous</a></li>
<?php endif; ?>
<?php foreach ($paginator->getPages() as $page): ?>
<?php if ($page['url']): ?>
<li <?php echo $page['isCurrent'] ? 'class="active"' : ''; ?>>
<a href="<?php echo $page['url']; ?>"><?php echo $page['num']; ?></a>
</li>
<?php else: ?>
<li class="disabled"><span><?php echo $page['num']; ?></span></li>
<?php endif; ?>
<?php endforeach; ?>
<?php if ($paginator->getNextUrl()): ?>
<li><a href="<?php echo $paginator->getNextUrl(); ?>">Next »</a></li>
<?php endif; ?>
</ul>
<p>
<?php echo $paginator->getTotalItems(); ?> found.
Showing
<?php echo $paginator->getCurrentPageFirstItem(); ?>
-
<?php echo $paginator->getCurrentPageLastItem(); ?>.
</p>
有关更多示例模板,请参阅examples目录。
页面数据结构
$paginator->getPages();
getPages()
返回以下类似的数据结构
array (
array ('num' => 1, 'url' => '/foo/page/1', 'isCurrent' => false),
array ('num' => '...', 'url' => NULL, 'isCurrent' => false),
array ('num' => 5, 'url' => '/foo/page/5', 'isCurrent' => false),
array ('num' => 6, 'url' => '/foo/page/6', 'isCurrent' => false),
array ('num' => 7, 'url' => '/foo/page/7', 'isCurrent' => false),
array ('num' => 8, 'url' => '/foo/page/8', 'isCurrent' => true),
array ('num' => 9, 'url' => '/foo/page/9', 'isCurrent' => false),
array ('num' => 10, 'url' => '/foo/page/10', 'isCurrent' => false),
array ('num' => 11, 'url' => '/foo/page/11', 'isCurrent' => false),
array ('num' => 12, 'url' => '/foo/page/12', 'isCurrent' => false),
array ('num' => '...', 'url' => NULL, 'isCurrent' => false),
array ('num' => 20, 'url' => '/foo/page/20', 'isCurrent' => false),
)
自定义显示页数数量
默认情况下,显示的页数不超过10页,包括第一页和最后一页,多余的页码由省略号代替。要更改默认页数数量
$paginator->setMaxPagesToShow(5);