ikkez / f3-pagination
为PHP Fat-Free 框架提供页面浏览器和一些分页工具
Requires
- bcosca/fatfree-core: 3.*
This package is auto-updated.
Last update: 2024-09-16 01:52:04 UTC
README
此插件为PHP Fat-Free 框架提供页面浏览器和一些分页工具。
需要 PHP Fat-Free 框架 3.6。
预览
默认页面浏览器模板包含默认的 bootstrap 类,它可能看起来像这样
使用方法
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/1
、search/results/2
、search/results/3
的 URL。
您还可以为页面链接添加前缀以获得更好的视觉和 SEO 体验
$pages->setRouteKeyPrefix('page-');
现在您的页面链接将看起来像这样:list/page-1
、list/page-2
、list/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]