我正在用 php 开发一个可能有很多用户的 Web 项目。从管理的角度来看,我试图显示一个包含每个用户信息的表,并且看到用户表可能变得非常大,我想使用分页。
在后端,我创建了一个服务,该服务需要一个限制和一个偏移量参数,用于在数据库中查询适当范围内的记录。该服务返回表中记录的总数,以及与查询匹配的记录
public static function getUsersInfo($limit = 50, $offset=1) { $users_count = Users::count( array( "column" => "user_id" ) ); $users_info = array(); $users = Users::query() ->order('created_at') ->limit($limit, $offset) ->execute() ->toArray(); foreach ($users as $index => $user) { $users_info[$index]['user_id'] = $user['user_id']; $users_info[$index]['name'] = $user['first_name'] . " " . $user['last_name']; $users_info[$index] ['phone'] = $user['phone']; $users_info[$index] ['profile_image_url'] = $user['profile_image_url']; } $results = array( 'users_count' => $users_count, 'users_info' => $users_info ); return !empty($results) ? $results : false; }
在前端,我想要实现的理想情况是,在表格底部显示导航,带有典型的上一个、下一个按钮,以及一些允许用户快速导航的数字如果显示页码,则转到所需的页面。到目前为止,这是我对 UsersController 所做的,没有分页。
class UsersController extends ControllerBase { public function indexAction() { $usersObject = new Users(); $data = $usersObject->getUsers(); if ($data['status'] == Constants::SUCCESS) { $users = $data['data']['users_info']; $users_count = $data['data']['users_count']; $this->view->setVar('users', $users); } echo $this->view->render('admin/users'); } public function getUsersAction() { echo Pagination::create_links(15, 5, 1); } }
我还没有任何工作分页,但我认为一个好的方法是创建一个 Pagination
库,其中包含一个 create_links
函数,该函数接受
total_count
数据库中的记录,所以我知道需要多少页limit
这样我就知道要收集多少记录cur_page
所以我知道从哪里开始检索
因此当使用正确的参数调用该函数时,它会生成实现分页的 html 代码,然后可以将其传递给 View 并显示。
我以前从未这样做过,但从我目前所做的研究来看,这似乎是一个很好的方法。任何与此相关的指导、建议或其他任何事情都将不胜感激。
最佳答案
看起来您正在使用一些定制的类似 MVC 的框架。虽然它没有准确回答您的问题,但我有几点:
- 如果您关注的是大量用户,那么分页问题是最少的。您需要考虑数据库的索引方式、结果的返回方式等等。
- 如果不了解您正在使用的底层数据库抽象层/驱动程序,就很难确定您的
->limit($limit, $offset)
行是否能正常工作。偏移量可能应该默认为 0,但不知道代码就很难说。 - 第一个方法中的三元运算符 (
return !empty($results) ? $results : false;
) 目前没有值(value),因为它之前的语句意味着变量将始终是一个数组. - 避免在 Controller 中使用 echo 语句。他们应该返回到模板引擎以输出 View 。
- 您的
Users
类最好命名为User
,因为 MVC 框架暗示“模型”是一个单独的实体。
虽然这不是一般规则,但我使用的大多数分页系统都在零索引系统上工作(第 1 页是第 0 页),因此计算限制范围很简单:
$total_records = 1000;
$max_records = 20;
$current_page = 0;
$offset = $max_records * $current_page;
$sql = "SELECT * FROM foo LIMIT $offset, $max_records";
关于php - html php mysql 如何实现分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36389562/