我正在使用Yii2 kartik gridview。下面是单击toggleData按钮之前和之后的2个图像。我无法在gridview中看到完整数据。
BEFORE
AFTER
只有分页消失但gridview不显示所有记录。我现在有10条记录,我已经将分页设置为5条记录。所以,如果我点击" All",我必须获得所有10条记录,但是如你所见,我只能获得5条记录。
下面是呈现页面之前的ActiveDataProvider代码。
内部控制器行为代码
$searchModel = new StudentsAdminSearch();
$dataProvider = $searchModel->search(\Yii::$app->request->queryParams);
return \Yii::$app->controller->render('student/student_list', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
COID INSIDE StudentAdminSearch
$dataProvider = new ActiveDataProvider([
'pagination' => [
'pageSize' => Constants::$PAGE_SIZE, // $PAGE_SIZE=5
],
'query' => $query,
]);
答案 0 :(得分:1)
由于您的Active数据提供程序的限制只显示5个限制,每次获取数据时该限制都是常量,因此您只能获得5条记录,这样您就可以使用yii2会话设置点击切换数据这个
$size=\Yii::$app->session->get('user.size');
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => isset($size) ? $size : 5,
],
'sort' => [
'defaultOrder' => [
'id' => SORT_DESC,
]
],
]);
其中user.size是会话值想要的,或者如果大小不存在,你也可以删除分页大小以获取所有数据
$notshowsize=\Yii::$app->session->get('user.size');
$pagination = array();
if($notshowsize){
$pagination = array();
}else{
$pagination = ['pageSize' => isset($size) ? $size : 5]
}
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => $pagination,
'sort' => [
'defaultOrder' => [
'id' => SORT_DESC,
]
],
]);
其中变量$ notshowsize是布尔值设置以显示分页中的数据
答案 1 :(得分:0)
我做了别的事,比会话变量更容易和可靠。
如果您看到,当我第一次登陆列表页面时,我会在地址栏中看到链接,例如,
http://localhost/nse/backend/web/index.php?r=site%2Fstudent-list
当我点击所有'按钮作为Kartik GridView内部的toggleButton,我在地址栏中得到链接,例如,
http://localhost/nse/backend/web/index.php?r=site%2Fstudent-list&_tog1149016d=all
如果你仔细看,我将额外的参数添加为 _tog1149016d ,其值为" 全部"。对于不同的安装和服务器,使用' _tog'变化。所以,内部搜索模型的搜索方法我做了这样的事情,
$pagination = Utility::getPagination($params);
$dataProvider = new ActiveDataProvider([
'pagination' => $pagination,
'query' => $query,
]);
我写了一个小实用程序函数来检查请求参数是否包含" all"或者"页面"或者没有。
public static function getPagination($request_params){
$param_val = 'page';
foreach($request_params as $key => $value){
if (strpos($key, '_tog') !== false) {
$param_val = $value;
}
}
$pagination = array();
if($param_val == 'all'){ //returns empty array, which will show all data.
return $pagination;
}else if($param_val == 'page'){ //return pageSize as 5
$pagination = ['pageSize' => 5];
return $pagination;
}
return $pagination; // returns empty array again.
}
上面的代码就像魅力一样。我附上下面的实施和运行方案证明,
点击" Page" (它启用分页,我的情况下,它是5)
点击"全部" (填充所有数据)
答案 2 :(得分:0)
我遇到了同样的问题,像下面的改进版本一样添加了如下静态函数。
public static function getPagination($request_params){
$param_val = 'page';
foreach($request_params as $key => $value){
if (strpos($key, '_tog') !== false) {
$param_val = $value;
}
}
$pagination = array();
if($param_val == 'all'){ //returns empty array, which will show all data.
$pagination = ['pageSize' => false];
}else if($param_val == 'page'){ //return pageSize as 5
$pagination = ['pageSize' => 20];
}else{
$pagination = ['pageSize' => false];
}
return $pagination; // returns empty array again.
}