ikkez/f3-pagination

为PHP Fat-Free 框架提供页面浏览器和一些分页工具

v1.4.5 2022-02-15 20:28 UTC

This package is auto-updated.

Last update: 2024-09-16 01:52:04 UTC


README

此插件为PHP Fat-Free 框架提供页面浏览器和一些分页工具。

需要 PHP Fat-Free 框架 3.6。

预览

默认页面浏览器模板包含默认的 bootstrap 类,它可能看起来像这样

pagebrowser

使用方法

1. 安装

将 pagination.php 复制到您的 lib/ 文件夹中,或者将其放入您在 AUTOLOAD 中定义的其中一个包含路径中(例如 $f3->set('AUTOLOAD', 'app/;app/includes');)。

分页插件使用一个 模板文件 来生成页面浏览器。将此模板(pagebrowser.html)放入您的 UI 文件夹中。(例如,如果您已定义一个 UI 目录,如 $f3->set('UI','templates/'),则将页面浏览器模板移到那里)

2. 路由

要使页面之间的路由工作,您需要添加一个包含令牌的新路由,该令牌可由我们的页面浏览器使用。

例如,如果您已经使用了一个路由如 $f3->route('GET /list', 'Blog->listAllArticles');,您必须添加此路由:$f3->route('GET /list/@page', 'Blog->listAllArticles');

您也可以将它们组合成一个单独的路由语句,如下所示

$f3->route(array(
    'GET /list',
    'GET /list/@page'
    ), 'Blog->listAllArticles');

3. 分页记录

在您的控制器中,您需要分页遍历您的记录。这样做最简单的方法是使用数据映射器和其 paginate 方法。

$article = new \DB\SQL\Mapper($f3->get('DB'),'article');

$limit = 10;
$page = \Pagination::findCurrentPage();
$filter = array('active = ?',1);
$option = array('order' => 'datetime DESC');

$subset = $article->paginate($page-1, $limit, $filter, $option);

$f3 = \Base::instance();
$f3->set('articleList', $subset);

现在您已将记录的子集放在 articleList f3 丛键中。它是一个包含分页状态和子集本身(所有记录作为数据映射器对象)的数组。有关详细说明,请参阅 paginate 方法。

但基本上,您可以使用此片段通过循环列表

<F3:repeat group="{{ @articleList.subset }}" value="{{ @article }}">
  <h2>{{ @article.title }}</h2>
  <p>{{ @article.text }}</p>
</F3:repeat>

4. 创建页面浏览器

方法 A:自定义标签

现在创建页面浏览器最简单的方法是使用自定义模板标签渲染器。它直接从您的模板内部生成页面浏览器。因此,只需在 index.php 中立即注册页面浏览器。

\Template::instance()->extend('pagebrowser','\Pagination::renderTag');

现在您可以在您的 HTML 模板中使用此视图助手

<F3:pagebrowser items="{{ @articleList.total }}" limit="{{ @articleList.limit }}"/>

并且完成了!可以通过添加更多标签参数进行额外的配置(见下文)。

方法 B:在控制器中自行渲染

// [...]
$f3->set('articleList', $subset);
// we continue after the previous example about setting up the record pagination

// build page links
$pages = new Pagination($subset['total'], $subset['limit']);
// add some configuration if needed
$pages->setTemplate('templates/pagebrowser-advanced.html');
// for template usage, serve generated pagebrowser to the hive
$f3->set('pagebrowser', $pages->serve());

现在您可以在模板中使用 {{ @pagebrowser | raw }} 来插入页面浏览器。

配置

当然,您可以在路由中定义另一个令牌键,而不是 @page。因此,只需在实例化时将其设置为第三个参数(此处不带 @ 符号)。

$pages = new Pagination($article_count, $items_per_page, 'paginationToken');

如果您的模板在另一个子目录中,或者您想使用不同的模板,则可以使用以下方式更改模板路径

$pages->setTemplate('templates/pagebrowser.html');

分页器根据当前路由生成链接。但有时您可能希望提供其他页面浏览器链接。您可以设置另一个链接路径如下所示

$pages->setLinkPath('search/results/');

现在它将生成类似 search/results/1search/results/2search/results/3 的 URL。

您还可以为页面链接添加前缀以获得更好的视觉和 SEO 体验

$pages->setRouteKeyPrefix('page-');

现在您的页面链接将看起来像这样:list/page-1list/page-2list/page-3

您还可以根据当前页面调整下一页和上一页的范围(默认为2)。

$pages->setRange(5);

当然,您也可以在自定义标签中设置所有这些选项。只需看看这个完全配置的示例标签。

<F3:pagebrowser items="{{@articleList.total}}" limit="{{ @articleList.limit }}" src="templates/pagebrowser.html" range="5" link-path="/search/results/" token="articlePage" token-prefix="page-" />

您还可以将这些模板变量传递给所有这些参数,例如 range="{{@range}}"

测试套件

将测试添加到fatfree-dev测试平台

// Pagination Tests
$f3->concat('AUTOLOAD',',sugar/Pagination/test/,sugar/Pagination/lib/');
\PaginationTest::init();

许可证

您可以在GNU通用公共许可证第3版或更高版本的情况下使用此插件。

版权(C)2022 克里斯蒂安·诺斯 [ikkez]