我正在开发一个可能有很多用户的php项目。从管理的角度来看,我试图显示一个包含每个用户信息的表,并且看到用户表可能会变得非常大,我想使用分页。
在后端,我创建了一个服务,它需要一个limit和一个offset参数,用于在数据库中查询相应范围内的记录。该服务返回表中记录的总数以及与查询匹配的记录
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;
}
在前端,我想要达到的理想状态是,将导航显示在表格底部,使用典型的上一个,下一个按钮,还有一些允许用户快速导航的数字如果显示页码,则转到所需页面。这是我到目前为止用户控制器,没有分页。
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代码以实现分页,然后可以将其传递给视图并显示。
我之前从未这样做过,但从我迄今为止所做的研究来看,似乎这可能是一种很好的方法。任何关于此的指导,建议或任何内容都将非常感激。
答案 0 :(得分:0)
看起来你正在使用一些定制的MVC-ish框架。虽然它没有回答你的问题,但我有几点:
->limit($limit, $offset)
行是否能够正常工作。偏移量可能默认为0,但不知道代码很难说。return !empty($results) ? $results : false;
)中的三元运算符目前是无值的,因为它之前的语句将意味着该变量将始终是一个数组。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";