使用Yii 1.1.12。我关闭了ajax CListView:
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
'ajaxUpdate' => false,
)); ?>
第二页链接的网址如下:
http://www.example.com/products?Product_page=2
我希望网址看起来像:
http://www.example.com/products?page=2
我怎样才能做到这一点?
(奖励还包括如何获取http://www.example.com/products/page/2
)
更新
正如elbek所指出的,我看到CListView具有类型为CLinkPager的pager
属性。这反过来又有一个pages
类型的属性CPagination,其属性pageVar被描述为:
存储当前页面索引的GET变量的名称。默认为 '页面'。
听起来它可能是我正在寻找的,但不知道如何从CListView修改它。
答案 0 :(得分:5)
另外要更改pageVar
,您必须修改$dataProvider
。您可以在控制器操作中定义它时执行此操作:
$dataProvider=new CActiveDataProvider('Products',array(
'pagination'=>array(
'pageVar'=>'page'
)
));
或者,您可以在$dataProvider
中使用之前修改视图中的CListView
:(不推荐 - 由于关注点分离)
$dataProvider->pagination=array('pageVar'=>'page');
$this->widget('zii.widgets.CListView', array(/*rest of your code*/));
但是,通过此更改,要使您的网址看起来像http://www.example.com/products/page/2
,您需要稍微更改urlManager
中来自Suvera答案的规则:
'products/page/<page:\d+>'=>'products/index',
注意:如果您不需要这种类型的网址,则不需要上述规则,只需指定pageVar
即可。
答案 1 :(得分:3)
在配置上启用urlManager组件。并在顶部添加以下规则。
'urlManager'=>array(
......
'rules'=>array(
'products/page/<Product_page:\d+>'=>'products/index', //Add it in top
...........
...........
),
),
上述规则会创建类似http://www.example.com/products/page/2
规则products/index
中的值部分是产品控制器和索引操作(这很重要,因此请指出实际路线)。< / p>
你甚至可以随心所欲地创建网址。
前1:
'products/<Product_page:\d+>'=>'products/index'
会给你http://www.example.com/products/2
ex 2
'TheAvengers/vs/Loki/<Product_page:\d+>'=>'products/index'
会给你http://www.example.com/TheAvengers/vs/Loki/2
答案 2 :(得分:0)
我认为CListView具有pager属性(来自其父类)
您可以尝试为此设置一些属性。我认为这是CLinkPager实例。