craftsmancoding/pagination

此软件包最新版本(dev-master)没有可用的许可证信息。

.

dev-master 2014-10-27 16:07 UTC

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,从这里开始。

Default style

apple

像苹果一样。

Apple style

digg

喜欢它。

Digg style

flickr

Flickr style

自定义模板

如果您不喜欢我们的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 : 包裹最终输出。这个模板是一个很好的总结信息的地方。