94 lines
2.8 KiB
PHP
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;
|
|
}
|
|
}
|