在PHP中创建分页类
我想构建一个在PHP中创建分页类,php,oop,pagination,Php,Oop,Pagination,我想构建一个paginator类,但我不确定最好的方法是什么。我在网上看到许多不同的代码,这让我很困惑 我的数据存储在MySQL数据库中。我是否必须给我的pagniator类一个查询,以便它可以为我从MySQL中检索数据(当然,之后它会自动进行一些分页计算)?或者首先从模型获取所有数据,然后将从该模型返回的数组提供给分页器类 无论采用哪种方式,我都可能需要执行另一个查询来获取记录的“总计”数量,并将结果作为单独的参数传递给pagninator类 一旦我知道如何开始,那么我就知道如何收拾剩下的东西
paginator
类,但我不确定最好的方法是什么。我在网上看到许多不同的代码,这让我很困惑
我的数据存储在MySQL数据库中。我是否必须给我的pagniator类一个查询,以便它可以为我从MySQL中检索数据(当然,之后它会自动进行一些分页计算)?或者首先从模型
获取所有数据,然后将从该模型返回的数组
提供给分页器
类
无论采用哪种方式,我都可能需要执行另一个查询来获取记录的“总计”数量,并将结果作为单独的参数传递给pagninator
类
一旦我知道如何开始,那么我就知道如何收拾剩下的东西。我只是不知道如何将数据传递到分页器
类以及什么样的数据
你知道如何构建一个好的
分页器
类吗?一个设计良好的OO分页器
类应该独立于数据和数据库
它应该采用像count
、page
和per_page
这样的参数,并且应该将可用于依赖项注入的对象返回到模型中,以生成具有适当限制的查询,或者返回到分页帮助器
类中,以呈现适当的HTML
好的Paginator接口示例(本文给出了10分钟的思考):
通过扩展基础模型,然后让应用程序模型扩展PaginatorModel而不是model,可以集成到模型中的示例:
class PaginationModel extends Model {
public function query($sql, iPaginatorPage $page = null) {
if (!empty($page)) {
$start = $page->getStart();
$length = $page->getCount();
$sql .= " LIMIT ({$start}, {$length})";
return parent::query($sql);
}
}
}
一个设计良好的OOPaginator
类应该独立于您的数据和数据库
它应该采用像count
、page
和per_page
这样的参数,并且应该将可用于依赖项注入的对象返回到模型中,以生成具有适当限制的查询,或者返回到分页帮助器
类中,以呈现适当的HTML
好的Paginator接口示例(本文给出了10分钟的思考):
通过扩展基础模型,然后让应用程序模型扩展PaginatorModel而不是model,可以集成到模型中的示例:
class PaginationModel extends Model {
public function query($sql, iPaginatorPage $page = null) {
if (!empty($page)) {
$start = $page->getStart();
$length = $page->getCount();
$sql .= " LIMIT ({$start}, {$length})";
return parent::query($sql);
}
}
}
创建类,并具有如下功能:
函数结果集($required\u filters,$table,$pagenum,$records){
$getCount='SELECT count(*)from table';
$sql=“从“$table.”LIMIT.($pagenum-1)*$records.“,”$records中选择“$required fields.”;
$sqlres=。。。
返回数组($getCount,$sqlres);}
将此函数调用为list($rescount,$arrData)=resultset(all
参数)
对于分页,使用一些for循环来显示页码…对于总计$rescount页,
使用get,您可以突出显示当前pagenum创建类,并具有如下功能:
函数结果集($required\u filters,$table,$pagenum,$records){
$getCount='SELECT count(*)from table';
$sql=“从“$table.”LIMIT.($pagenum-1)*$records.“,”$records中选择“$required fields.”;
$sqlres=。。。
返回数组($getCount,$sqlres);}
将此函数调用为list($rescount,$arrData)=resultset(all
参数)
对于分页,使用一些for循环来显示页码…对于总计$rescount页,
使用get可以突出显示当前pagenum检查Pear的实现。这是一个非常好的类,使用简单,有很多很酷的特性。检查Pear的实现。这是一个非常好的类,使用简单,并且有很多很酷的特性。可能与之相关,@Cobra\u Fast:knowmysql.*
正在被弃用,不应该再使用我是否先从模型中获取所有数据
不,你应该只拉出需要显示的行,不要在每个页面视图上都占据整个表格…@Vivendi-您对我的答案有任何问题或反馈吗?我花了相当多的时间为你整理。可能与之相关,@Cobra\u Fast发布的链接:知道mysql\u*
正在被弃用,不应该再使用我是否首先从模型中获取所有数据
不,你应该只拉出需要显示的行,不要在每个页面视图上都占据整个表格…@Vivendi-您对我的答案有任何问题或反馈吗?我花了相当多的时间为你整理。做了一些调整。我现在对此比较满意。谢谢,这给了我一个很好的开始方法。但有一件事我无法从你的代码中理解。我不知道如何让分页类知道总共有多少条记录?知道什么是好方法吗?@Vivendi-_构造()中的$total_count参数标识总共有多少条记录。进行了一些调整。我现在对此比较满意。谢谢,这给了我一个很好的开始方法。但有一件事我无法从你的代码中理解。我不知道如何让分页类知道总共有多少条记录?知道什么是好方法吗?@Vivendi-_construct()中的$total_count参数标识总共有多少条记录。