使用分页的处理方式取决于你所使用的框架和数据库。基于你之前提供的代码,看起来你可能正在使用ThinkPHP框架,并已经开始使用paginate()
方法进行分页。我将根据这个假设为你提供一个完整的代码示例,包括对前端分页显示的处理。
下面是一个使用ThinkPHP框架进行分页查询的改进后的函数示例:
public static function getIndexQuestionList($type, $category_id = null, $user_id = null, $zone_id = null, $keyword = null, $conditions = [], $minId = '17000000')
{
$typeArr = [
'new' => 'createtime',
'hot' => 'answers',
'price' => 'createtime',
'unsolved' => 'createtime',
'unanswer' => 'createtime',
'unsettled' => 'rewardtime',
'solved' => 'createtime',
];
$questionModel = self::with(['category', 'user'])->field('reports,peeps,deletetime', true);
// 使用分页
$pageSize = isset(self::$config['pagesize']['question']) ? self::$config['pagesize']['question'] : 20; // 默认每页显示20条数据
$list = $questionModel
->where('status', '<>', 'hidden')
->where('id', '>', $minId)
->where(function ($query) use ($type, $category_id, $user_id, $zone_id, $keyword) {
if ($type == 'price') {
$query->where('price|score', '>', 0);
} elseif ($type == 'unsolved') {
$query->where('best_answer_id', '=', 0);
$query->where('status', '=', 'normal');
} elseif ($type == 'unanswer') {
$query->where('answers', '=', 0);
} elseif ($type == 'unsettled') {
$query->where('price|score', '>', 0);
$query->where('best_answer_id', '=', 0);
$query->where('rewardtime', '<', strtotime("-" . self::$config['adoptdays'] . ' days'));
} elseif ($type == 'solved') {
$query->where('best_answer_id', '>', 0);
}
if ($category_id) {
$query->where('category_id', '=', $category_id);
}
if ($user_id) {
$query->where('user_id', '=', $user_id);
}
if ($zone_id) {
$query->where('zone_id', '=', $zone_id);
}
if ($keyword) {
$arr = array_filter(explode(' ', $keyword));
foreach ($arr as $index => $item) {
$query->where('title', 'like', "%{$item}%");
}
}
})
->where($conditions)
->order(isset($typeArr[$type]) ? $typeArr[$type] : $typeArr['new'], $type == 'unsettled' ? 'asc' : 'desc')
->paginate($pageSize, false, ['query' => request()->param()]);
Tag::render($list, 'question');
return $list;
}
在前端,你可以这样显示分页链接(假设你使用的是Bootstrap作为CSS框架):
<div class="container">
<!-- 循环显示问题列表 -->
<?php foreach ($list as $question): ?>
<div><?php echo $question['title']; ?></div>
<?php endforeach; ?>
<!-- 分页链接 -->
<?php echo $list->render(); ?>
</div>
在这里,$list->render()
会生成分页链接。确保你的控制器正确地传递了$list
变量到视图。
这是在ThinkPHP框架中使用分页的一种常见方式。如果你使用的不是ThinkPHP或者有其他特定需求,请告知以便我能提供更精确的帮助。