Files
23cm/common/PaginationHelper.php
2026-01-25 18:18:09 +08:00

94 lines
2.8 KiB
PHP

<?php
namespace app\common;
use yii\data\ActiveDataProvider;
use yii\data\ArrayDataProvider;
use yii\db\ActiveQuery;
use yii\db\QueryInterface;
use yii\di\NotInstantiableException;
class PaginationHelper
{
/**
*
* @param \yii\db\ActiveQuery $query
* @param int $limit
* @param string $pageParam
* @param string $pageSizeParam
*
* @return \yii\data\ActiveDataProvider
*/
public static function createDataProvider($query, $limit = 10, $pageParam = 'page', $pageSizeParam = 'per_page')
{
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
//分页大小
'pageSize' => \Yii::$app->request->get($pageSizeParam) ?: $limit,
//设置地址栏当前页数参数名
'pageParam' => $pageParam,
//设置地址栏分页大小参数名
'pageSizeParam' => $pageSizeParam,
],
]);
return $dataProvider;
}
/**
* @param $query
* @param int $limit
* @param string $pageParam
* @param string $pageSizeParam
*
* @return \yii\db\QueryInterface
* @throws \yii\di\NotInstantiableException
*/
public static function createQueryProvider($query, $limit = 10, $pageParam = 'page', $pageSizeParam = 'limit')
{
$param = \Yii::$app->request->get();
$pageSize = $param['limit'] ?: $param[$pageSizeParam];
if ($query instanceof QueryInterface) {
return $query->limit($pageSize)->offset(($param[$pageParam] - 1) * $pageSize);
}
throw new NotInstantiableException('not instanceof QueryInterFace');
}
/**
* @param array $array
* @param int $limit
* @param string $pageParam
* @param string $pageSizeParam
* @param array $orderFields
*
* @return ArrayDataProvider
*/
public static function createArrayDataProvider($array = [], $orderFields = [], $limit = 10, $pageParam = 'page', $pageSizeParam = 'limit')
{
$attributes = array_keys($orderFields);
$order = $orderFields;
$dataProvider = new ArrayDataProvider([
'allModels' => $array,
'sort' => [
'attributes' => $attributes,
'defaultOrder' => $order
],
'pagination' => [
//分页大小
'pageSize' => \Yii::$app->request->get($pageSizeParam, 10),
//设置地址栏当前页数参数名
'pageParam' => $pageParam,
//设置地址栏分页大小参数名
'pageSizeParam' => $pageSizeParam,
],
]);
return $dataProvider;
}
}