Kartik GridView Yii2:切换数据在工具栏中不起作用
Kartik GridView Yii2 : Toggle data not working in toolbar
我正在使用 Yii2 kartik gridview。下面是点击 toggleData 按钮前后的 2 张图片。我无法在 gridview 中看到完整数据。
之前
之后
只有分页消失了,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,
]);
StudentAdminSearch 中的代码
$dataProvider = new ActiveDataProvider([
'pagination' => [
'pageSize' => Constants::$PAGE_SIZE, // $PAGE_SIZE=5
],
'query' => $query,
]);
由于您的活动数据提供者限制只能显示 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 是布尔值,设置为是否分页显示数据
我做了一些其他的事情,比会话变量简单和可靠。
如果你看到,当我第一次登陆列表页面时,我在地址栏中得到一个 link,例如,
http://localhost/nse/backend/web/index.php?r=site%2Fstudent-list
当我在 Kartik GridView 中单击“ALL”按钮作为切换按钮时,我在地址栏中得到一个 link ,
http://localhost/nse/backend/web/index.php?r=site%2Fstudent-list&_tog1149016d=all
如果你仔细看,我会添加额外的参数 _tog1149016d,值为“all”。对于不同的安装 ans 服务器,带有“_tog”的数字会发生变化。所以,内部搜索模型的搜索方法我做了这样的事情,
$pagination = Utility::getPagination($params);
$dataProvider = new ActiveDataProvider([
'pagination' => $pagination,
'query' => $query,
]);
我写了一个小实用函数来检查请求参数是否包含 "all" 或 "page" 或什么都不包含。
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)
点击 "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.
$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.
}
我正在使用 Yii2 kartik gridview。下面是点击 toggleData 按钮前后的 2 张图片。我无法在 gridview 中看到完整数据。
之前
之后
只有分页消失了,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,
]);
StudentAdminSearch 中的代码
$dataProvider = new ActiveDataProvider([
'pagination' => [
'pageSize' => Constants::$PAGE_SIZE, // $PAGE_SIZE=5
],
'query' => $query,
]);
由于您的活动数据提供者限制只能显示 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 是布尔值,设置为是否分页显示数据
我做了一些其他的事情,比会话变量简单和可靠。
如果你看到,当我第一次登陆列表页面时,我在地址栏中得到一个 link,例如,
http://localhost/nse/backend/web/index.php?r=site%2Fstudent-list
当我在 Kartik GridView 中单击“ALL”按钮作为切换按钮时,我在地址栏中得到一个 link ,
http://localhost/nse/backend/web/index.php?r=site%2Fstudent-list&_tog1149016d=all
如果你仔细看,我会添加额外的参数 _tog1149016d,值为“all”。对于不同的安装 ans 服务器,带有“_tog”的数字会发生变化。所以,内部搜索模型的搜索方法我做了这样的事情,
$pagination = Utility::getPagination($params);
$dataProvider = new ActiveDataProvider([
'pagination' => $pagination,
'query' => $query,
]);
我写了一个小实用函数来检查请求参数是否包含 "all" 或 "page" 或什么都不包含。
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)
点击 "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.
$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.
}