PHP分页库,无框架限制,内置Doctrine、Eloquent、Pixie和PHP数组适配器。

dev-master 2013-11-15 13:33 UTC

This package is auto-updated.

Last update: 2024-08-29 00:23:37 UTC


README

PHP智能分页库

Build Status SensioLabsInsight Scrutinizer Code Quality Score Bitdeli Badge Dependency Status

一个无框架限制的智能分页库,只需几行代码即可实现完整的分页功能。

使用Strana分页您的记录。Strana将自动切割(limit和offset)这些记录,为您生成分页链接,并从这些链接中读取页面编号。

特性

  • 内置对DoctrineEloquent (Laravel)Pixie、PHP数组和手动方式的适配。
  • 可读的语法
  • 一行代码添加无限滚动
  • 自动检测您正在使用的DBAL。
  • 自动使用Twitter Bootstrap、Zurb Foundation和其他大多数CSS框架进行样式化。

屏幕截图

Screenshot

示例

基本上Strana使这变得非常简单,如下面的代码所示

$paginator = $strana->perPage(10)->make($records);

这就是全部。

完整使用示例

// Make sure you have Composer's autoload file included
require 'vendor/autoload.php';

$strana = new \Strana\Paginator();
$records = array(1, 2, 3, .... 100);
$paginator = $strana->perPage(10)->make($records);

// Loop paginated items
foreach ($paginator as $item) {
    echo $item['field_name'] . '<br>';
}

// Print pagination links
echo '<br><br>' . $paginator;

以下是一些高级选项,将在下面进行文档说明。准备好了吗?让我们开始安装。

安装

Strana使用Composer来简化操作,它是必需的。

学习如何使用Composer,并将其添加到require部分(在您的composer.json中)

"usmanhalalit/strana": "1.*@dev"

然后运行

composer update

库位于Packagist上。

完整教程

Strana内置了Doctrine Dbal、Laravel Eloquent、Pixie和PHP原生数组的适配器。如果您想要从这些中分页,那么您很幸运。根据反馈,还将提供更多适配器。

步骤1

准备您的数据库或数组记录

Doctrine Dbal示例

$records = $qb->select('*')->from('sample', 'sample');

Laravel Eloquent(或查询构建器)示例

$records = Capsule::select('*')->from('sample');

Pixie示例

$records = QB::select('*')->from('sample');

数组示例

$records = array(1, 2, 3, 4, 5);

步骤2

使用Strana分页您的记录。Strana将自动切割(limit和offset)这些记录,为您生成分页链接,并从这些链接中读取页面编号。

$strana = new \Strana\Paginator();
$paginator = $strana->perPage(10)->make($records);

步骤3

循环分页记录以显示

foreach ($paginator as $item) {
    echo $item['field'] . '<br>';
}

步骤4

打印您的分页链接

echo $paginator;

这将产生类似以下内容

Screenshot

无限滚动

Strana自带无限滚动功能,只需一个方法即可启用。

$strana->infiniteScroll()->perPage(10)->make($records);

然后使用特定的CSS类将所有分页项目和分页链接包裹起来,如下例所示。

示例

echo '<div class="container">';
foreach ($paginator as $item) {
    print('<div class="item">' . $item['t_value'] . '</div>');
}


echo '<br><br>' . $paginator;
echo '</div>';

就这样,您已经完成了无限滚动。

Strana使用Infinite Ajax Scroll jQuery插件。Strana支持该插件的所有配置选项。

$iasConfig = array(
    'loaderDelay' => 600,
    'loader'      => '<img src="images/loader.gif"/>',    
);

$strana->infiniteScroll($iasConfig)->perPage(10)->make($records);

酷吗?

使用API

perPage($perPage)

每页的项目数,默认为10。

page($page)

要显示的页面,默认从查询字符串中读取,否则为1。

infiniteScroll(Array $config = array())

使用Ajax启用无限滚动。可以通过$config传递选项。

make($records, $adapter = null, $config = array())

创建并返回分页对象。

$records = 要分页的记录。

$adapter = 想要使用的适配器名称,例如字符串类型的 DoctrineDbalEloquentPixieArray 等。如果省略或提供的是假值,Strana 足够智能,可以自动检测适配器。如果想要使用自定义适配器,则在这里传递对象/实例。自定义适配器必须实现 Strana\Interfaces\CollectionAdapter 接口。

$config = 所有 Strana 配置都可以在这里以数组的形式传递,例如 $config = array('maximumPages' => 7)

记录集对象

make() 方法返回 Strana\RecordSet 类的实例。它是一个 多态 对象,例如

$paginator = $strana->make($records);

在这里,如果你用 foreach 循环 $paginator,它将像数组一样工作,遍历分页项;如果你 echo $paginator,它将像字符串一样工作,打印分页链接。当然,你也可以像类对象一样使用它。$paginator->records() 将返回分页记录。$paginator->total() 将返回总记录数。$paginator->links() 将返回分页链接。

开发您的自定义适配器

如果您没有使用 Strana 随附的数据库工具的适配器,您可以轻松地构建自己的适配器。创建您的类,该类必须实现 Strana\Interfaces\CollectionAdapter

示例适配器,请阅读注释以了解。

<?php
use Strana\ConfigHelper;
use Strana\Interfaces\CollectionAdapter;

class CustomAdapter implements CollectionAdapter{

    /**
     * @var \Strana\ConfigHelper
     * Config helper is a helper class, which gives you config values
     *  used by Strana.
     */
    protected $configHelper;

    /**
     * @var
     */
    protected $records;

    public function __construct($records, ConfigHelper $configHelper)
    {
        $this->records = $records;
        $this->configHelper = $configHelper;
    }
    
    /**
     * This method should limit and offset your records and return.
     */
    public function slice()
    {
        // Here you will get the database object passed to Strana.
        //  Clone it.
        $records = clone($this->records);
        
        // Get the limit number from Strana config
        $limit = $this->configHelper->getLimit();
        
        // Get the offset number from Strana config
        $offset = $this->configHelper->getOffset();
        
        // Limit your records
        $records->limit($limit);
        // Offset your records
        $records->offset($offset);
        
        // Return your sliced records
        return $records->get();
    }

    /**
     * This method should return total count of all of your records.
     */
    public function total()
    {
        // Here you will get the database object passed to Strana.
        //  Clone it.
        $records = clone($this->records);
        
        // Return your total records count, unsliced.
        return $records->count();
    }
}

请参阅 ArrayAdapter 以获取更多想法。

使用您的适配器

$strana = new \Strana\Paginator();
$configHelper = new \Strana\ConfigHelper($strana->getConfig());
$adapter = new CustomAdapter($yourRecords, $configHelper);
$paginator = $paginatorClass->make($yourRecords, $adapter);

© 2013 Muhammad Usman。许可协议:MIT。