如何在Yii CListView中控制页面获取参数?

时间:2012-09-30 21:09:11

标签: url yii

使用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具有类型为CLinkPagerpager属性。这反过来又有一个pages类型的属性CPagination,其属性pageVar被描述为:

  

存储当前页面索引的GET变量的名称。默认为   '页面'。

听起来它可能是我正在寻找的,但不知道如何从CListView修改它。

3 个答案:

答案 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实例。