下一页的Listview分页和GET参数
Listview pagination and GET parameters on the next page
我有这个 UrlManager
规则:
'<pageSlug>-pa<pageId:\d+>' => 'page/page',
然后我有这样的 url 页面 domain.com/blog-pa54
在这个例子中我有
pageSlug = blog
和 pageId = 54
在我看来,我的博文有 ListView
。
我这样设置我的数据提供者:
$dataProvider = new ActiveDataProvider([
'query' => BlogPost::find()
->where([
'active' => 1
]),
'pagination' => [
'defaultPageSize' => 3,
//'params' => [], when I set this, it only shows get param "page"
'pageParam' => 'page',
'route' => $pageURL, // this variable is equal to "blog-pa54"
],
]);
我的路线是当前路线 url slug - blog-pa54
当我转到下一页时,我收到此 url:blog-pa54?pageSlug=blog&pageId=54&page=2
如何从 url 中删除 $_GET 参数 pageSlug
和 pageId
?
我尝试设置 pagination > params = []
并删除此获取参数,但是当我转到其他页面时它不会更改我的 ListView
中的项目
这也是我的 ListView
和 LinkPager
<div class="blog-post-wrapper">
<?= ListView::widget([
'dataProvider' => $blogPostsDataprovider,
'itemOptions' => ['tag' => null],
'options' => [
'tag' => false,
],
'layout' => "{summary}<div class='row'>{items}</div>",
'itemView' => function ($model, $key, $index, $widget) use ($page) {
return $this->render('//blog-post/_blogPostList', [
'page' => $page,
'model' => $model
]);
},
]); ?>
</div>
<?= \yii\widgets\LinkPager::widget([
'pagination' => $blogPostsDataprovider->pagination,
'linkContainerOptions' => [
'class' => 'page-item',
],
'linkOptions' => [
'class' => 'page-link',
],
]); ?>
好的,我明白了。
params
属性不能为空。
你可以这样设置:
'params' => [
'page' => isset($_GET['page']) ? $_GET['page'] : 1,
]
或者如果您有另一个获取参数,例如获取过滤器:
$getParams = [];
if(isset($_GET)){
foreach($_GET as $getKey => $getValue){
if(in_array($getKey, ['pageSlug', 'pageId'])){ //here I skip my params from UrlManager rule
continue;
}
$getParams[$getKey] = $getValue;
}
}
.....
'params' => $getParams
我有这个 UrlManager
规则:
'<pageSlug>-pa<pageId:\d+>' => 'page/page',
然后我有这样的 url 页面 domain.com/blog-pa54
在这个例子中我有
pageSlug = blog
和 pageId = 54
在我看来,我的博文有 ListView
。
我这样设置我的数据提供者:
$dataProvider = new ActiveDataProvider([
'query' => BlogPost::find()
->where([
'active' => 1
]),
'pagination' => [
'defaultPageSize' => 3,
//'params' => [], when I set this, it only shows get param "page"
'pageParam' => 'page',
'route' => $pageURL, // this variable is equal to "blog-pa54"
],
]);
我的路线是当前路线 url slug - blog-pa54
当我转到下一页时,我收到此 url:blog-pa54?pageSlug=blog&pageId=54&page=2
如何从 url 中删除 $_GET 参数 pageSlug
和 pageId
?
我尝试设置 pagination > params = []
并删除此获取参数,但是当我转到其他页面时它不会更改我的 ListView
这也是我的 ListView
和 LinkPager
<div class="blog-post-wrapper">
<?= ListView::widget([
'dataProvider' => $blogPostsDataprovider,
'itemOptions' => ['tag' => null],
'options' => [
'tag' => false,
],
'layout' => "{summary}<div class='row'>{items}</div>",
'itemView' => function ($model, $key, $index, $widget) use ($page) {
return $this->render('//blog-post/_blogPostList', [
'page' => $page,
'model' => $model
]);
},
]); ?>
</div>
<?= \yii\widgets\LinkPager::widget([
'pagination' => $blogPostsDataprovider->pagination,
'linkContainerOptions' => [
'class' => 'page-item',
],
'linkOptions' => [
'class' => 'page-link',
],
]); ?>
好的,我明白了。
params
属性不能为空。
你可以这样设置:
'params' => [
'page' => isset($_GET['page']) ? $_GET['page'] : 1,
]
或者如果您有另一个获取参数,例如获取过滤器:
$getParams = [];
if(isset($_GET)){
foreach($_GET as $getKey => $getValue){
if(in_array($getKey, ['pageSlug', 'pageId'])){ //here I skip my params from UrlManager rule
continue;
}
$getParams[$getKey] = $getValue;
}
}
.....
'params' => $getParams