usmanhalalit / strana
PHP分页库,无框架限制,内置Doctrine、Eloquent、Pixie和PHP数组适配器。
Requires
- php: >=5.3.0
Requires (Dev)
- doctrine/dbal: 2.3.4
- illuminate/database: 4.1.*@dev
- phpunit/phpunit: 3.7.*
- usmanhalalit/pixie: 1.*@dev
This package is auto-updated.
Last update: 2024-08-29 00:23:37 UTC
README
PHP智能分页库
一个无框架限制的智能分页库,只需几行代码即可实现完整的分页功能。
使用Strana分页您的记录。Strana将自动切割(limit和offset)这些记录,为您生成分页链接,并从这些链接中读取页面编号。
特性
- 内置对Doctrine、Eloquent (Laravel)、Pixie、PHP数组和手动方式的适配。
- 可读的语法
- 一行代码添加无限滚动
- 自动检测您正在使用的DBAL。
- 自动使用Twitter Bootstrap、Zurb Foundation和其他大多数CSS框架进行样式化。
屏幕截图
示例
基本上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;
这将产生类似以下内容
无限滚动
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
= 想要使用的适配器名称,例如字符串类型的 DoctrineDbal
、Eloquent
、Pixie
、Array
等。如果省略或提供的是假值,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。