craftsmancoding / pagination
.
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-24 03:54:27 UTC
README
一个简单的分页库,适用于普通人:它生成翻页记录的链接,现在包括文档!尽管其他库可能有更优越的功能,但这个朴素的库试图通过示例和解释来弥补。如果你是一位超级天才,一眼就能看懂源代码,那么那些其他库对你来说效果很好。
概述
你随处可见分页链接:你处理数据库和记录集一段时间后,你会看到使用像这样的链接翻页记录的需求。
<< First < Prev. 1 2 3 4 5 Next > Last >>
这正是我们在这里创建的:带有GET参数来控制当前页的分页链接。这可能让你感到惊讶,但创建分页链接,你真正需要的是
- 可用的总记录数
- 每页要显示的记录数
- 从开始处的偏移量(即从哪一页开始)
- 当前页的URL。
其他一些内容是可选的,用于微调,但就是这样。一些分页类与控制器和模型绑定(例如Laravel的),因此你不需要提供太多信息,但因为这个是一个独立类,你必须手动做更多的事情。
让我们更仔细地看看如何实现这一点。
分页记录
直截了当。如何分页记录?
语法 links( integer $record_count, integer $offset=0, integer $per_page=25, string $base_url=null)
示例
<?php
$cnt = count_my_results();
$offset = (int) (isset($_GET['offset'])) ? $_GET['offset'] : 0;
print Pagination\Pager::links($cnt,$offset);
?>
或者在类中的某个地方更具有命名空间风格
<?php
use Pagination;
class Classy {
public function functional() {
$cnt = $this->count_my_results();
$offset = (int) (isset($_GET['offset'])) ? $_GET['offset'] : 0;
return Pager::links($cnt,$offset);
}
}
?>
带有基础URL的示例
<?php
print Pagination\Pager::links(100)
->setBaseUrl('http://yoursite.com/index.php?page=something');
?>
这对于页面URL依赖于GET参数的情况至关重要——因为分页链接也依赖于URL参数,因此您需要设置基础URL,以便链接知道哪些参数在翻页之间保持固定和不变。
你需要做什么
提醒/回顾...
计数结果:如何计数可用结果完全取决于您的特定框架或函数。大多数数据库驱动程序都将包括返回匹配给定查询的行数的选项。因为此库不试图成为全能的并连接到您的底层框架或驱动程序,您必须给它一些提示,并告诉Pager::links()函数您正在处理多少条记录。
读取偏移量:为了使链接在您翻页结果集时动态调整,您需要将偏移量传递给Pager::links()函数。这应该与您的代码用于偏移原始数据库查询的任何参数一起使用。
获取当前页的URL:这取决于您的特定框架或应用程序。如果您需要自定义此内容,请使用setBaseUrl()——如果需要分页的页面URL中包含参数,则此操作非常重要。
配置
有几个配置项可以控制输出行为。要设置任一选项,请使用setConfig()方法,并用新值引用键名,例如
Pagination\Pager::links(100)->setConfig('link_cnt', 3)
link_cnt
显示多少个页面链接?例如,3可能看起来像这样
<< First < Prev 1 2 3 Next > Last >>
而12可能生成一组链接,如下所示
<< First < Prev 1 2 3 4 5 6 7 8 9 10 11 12 Next > Last >>
默认为10。
jump_size
控制点击上一页/下一页链接时翻页的数量。当值为1时,它就像一本书一样操作——每次翻一页。可以实现大跳跃,例如,如果你一次显示10个链接,并且你翻10页向前,例如从显示第11页到第20页变为第21页到第30页等。
样式
这个库附带了一些分页链接样式,以帮助您开始。这些样式使用内联样式来实现模块化。如果您想自己标记组件,请从“默认”样式开始。要使用任何内置样式,请使用style()方法
<?php
print Pagination\Pager::links(100)
->style('flickr');
?>
默认
简洁明了,没有内嵌样式。如果您想使用自己的CSS,从这里开始。
apple
像苹果一样。
digg
喜欢它。
flickr
自定义模板
如果您不喜欢我们的HTML,那没问题,您可以设置最终结果的每一部分的自定义模板。
为了微调,您可以使用setTpl()方法逐个更改模板。
<?php
print Pagination\Pager::links(100)
->setTpl('outer','<div id="my_pagination" class="custom_footer_block">[+content+]</div>');
?>
查看“使用的模板”部分以获取所有可用模板的列表。
如果您想完全自定义,可以使用setTpls()方法设置所有模板
<?php
print Pagination\Pager::links(100)
->setTpls(
array(
'first' => '',
'last' => '',
'prev' => '',
'next' => '',
'current' => '',
'page' => '',
'outer' => '',
)
);
?>
查看“使用的模板”部分,熟悉每个组件在最终输出中的使用位置。
使用的模板
如果当前页面是3,正在工作的模板如下
<<First <<Prev 1 2 3 Next>> Last>>
\_____/ \____/ ^ ^ ^ \____/ \____/
| | | | | | +----- last
| | | | | +------------ next
| | | | +----------------- current
| | +-+------------------- page
| +------------------------- prev
+--------------------------------- first
\_________________________________________________/
|
+-------------------- outer
- first : 包含返回第一页的链接。
- prev : 包含返回上一页的链接(通常是前一页,但这是由“jump_size”配置控制的)。
- page : 格式化指向特定页面的链接(不是当前活跃的页面)。
- current : 格式化表示当前活跃页面的数字。
- next : 包含指向下一页的链接(通常是当前页之后的一页,但这是由“jump_size”配置控制的)。
- last : 包含指向结果最后一页的链接。
- outer : 包裹最终输出。这个模板是一个很好的总结信息的地方。



