ListQuery.php
2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<?php
namespace thread\actions;
use Yii;
use yii\base\{
Action, Exception
};
use yii\web\Response;
use yii\data\ActiveDataProvider;
use yii\helpers\ArrayHelper;
//
use thread\app\web\Pagination;
/**
* Class ListQuery
*
* @package thread\actions
* @author FilamentV <vortex.filament@gmail.com>
* @copyright (c) 2016, VipDesign
* @usage
* public function actions() {
* return [
* ...
* 'list' => [
* 'class' => QueryList::class,
* 'query' => $model::find(),
* 'recordOnPage' => 10
* ],
* ...
* ];
* }
*
*/
class ListQuery extends Action
{
/**
* Base layout
*
* @var string
*/
public $layout = '@app/layouts/base';
/**
* Base view
*
* @var string
*/
public $view = 'list';
/**
* Access Checking
*
* @var bool
*/
public $checkAccess = false;
/**
* @var \yii\db\ActiveQuery
*/
public $query = null;
/**
* Number of model per page
*
* @var integer
*/
public $recordOnPage = -1;
/**
* Model sort
*
* @var string
*/
public $sort = '';
/**
* @var array
*/
public $pagination = [];
/**
* Init action
*
* @inheritdoc
* @throws Exception
*/
public function init()
{
if ($this->query === null) {
throw new Exception('::Query must be set.');
}
}
/**
* Run action
*
* @return string
*/
public function run()
{
$data = new ActiveDataProvider([
'query' => $this->query,
'pagination' => $this->getPagination()
]);
$data->query->addOrderBy($this->sort);
if (Yii::$app->getRequest()->isAjax) {
Yii::$app->getResponse()->format = Response::FORMAT_JSON;
return $this->controller->renderPartial($this->view, [
'model' => $data->getModels(),
]);
} else {
$this->controller->layout = $this->layout;
return $this->controller->render($this->view, [
'models' => $data->getModels(),
'pages' => $data->getPagination(),
]);
}
}
/**
* @return array
*/
public function getPagination()
{
return ArrayHelper::merge([
'class' => Pagination::class,
'pageSize' => $this->recordOnPage
], $this->pagination);
}
}