use think\Db;
use think\Paginator;
/**
* 商品列表查询(带分页)
*
* @param int $pageNumber 页码
* @param int $pageSize 每页数量
* @return \think\Paginator
*/
function getProductList($pageNumber = 1, $pageSize = 10)
{
// 使用 paginate 进行分页查询
$products = Db::name('product')
->alias('p')
->field('itemid, name, m_price, price, logo, sale_num, sort, is_sale, is_floor, addtime, update_time')
->where(function ($query) {
$query->whereOr('is_sale', '=', 0)
->whereOr('is_floor', '=', 0);
})
->order('sort', 'DESC')
->paginate($pageSize, false, ['page' => $pageNumber]);
// 获取分页数据集(集合)
$data = $products->items();
// 对每条数据进行扩展处理(例如添加自定义字段)
$processedData = array_map(function ($item) {
$item['logo_url'] = !empty($item['logo']) ? 'https://yourdomain.com/uploads/' . $item['logo'] : '';
$item['addtime_format'] = date('Y-m-d H:i', $item['addtime']);
$item['status_text'] = $item['is_sale'] ? '在售' : '停售';
// 示例:添加自定义标记
if (!$item['is_sale'] || !$item['is_floor']) {
$item['warning'] = '该商品存在下架或未推荐状态';
}
return $item;
}, $data);
// 将处理后的数据重新设置回分页对象
$products->setCollection(collect($processedData));
return $products;
}
// 调用示例
$pageNumber = input('get.page', 1, 'intval');
$pageSize = 10;
$products = getProductList($pageNumber, $pageSize);
// 输出结果(适用于 API 或模板渲染)
$result = [
'data' => $products->items(), // 当前页数据
'total' => $products->total(), // 总记录数
'last_page' => $products->lastPage(), // 最后一页
'current_page'=> $products->currentPage(), // 当前页
'per_page' => $products->listRows(), // 每页数量
];
// 返回 JSON(API 场景)
return json($result);
// 或者在模板中使用 $products->render() 输出分页 HTML
?>