1

使用 Yii 1.1.12。我有一个关闭 ajax的CListView :

<?php $this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider,
    'itemView'=>'_view',
    'ajaxUpdate' => false,
)); ?>

第二页链接的 url 如下所示:

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类型的属性。这又具有CPagination类型的属性,该属性具有pageVar属性,描述为:pages

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

听起来这可能是我正在寻找的东西,但不确定如何从 CListView 修改它。

4

3 回答 3

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您需要稍微更改urlManagerSuvera 回答中的规则:

'products/page/<page:\d+>'=>'products/index',

注意:如果你不需要那种类型的 url,你就不需要上面的规则,只需要指定pageVar就可以了。

于 2012-10-03T04:42:55.093 回答
3

在您的配置中启用 urlManager 组件。并在顶部添加以下规则。

'urlManager'=>array(
    ......
    'rules'=>array(
        'products/page/<Product_page:\d+>'=>'products/index', //Add it in top
        ...........
        ...........
    ),
),

上面的规则将创建一个类似的 urlhttp://www.example.com/products/page/2

规则中的值部分products/index产品控制器和索引操作(这很重要,因此请指出您的实际路线)。

您甚至可以随心所欲地创建网址。

例 1:

'products/<Product_page:\d+>'=>'products/index'

会给你 http://www.example.com/products/2

前 2

'TheAvengers/vs/Loki/<Product_page:\d+>'=>'products/index'

会给你 http://www.example.com/TheAvengers/vs/Loki/2

于 2012-10-01T05:47:46.010 回答
0

I think CListView has pager attribute(from its parent class)

You can try to set some attributes for this. I think it is CLinkPager instance.

于 2012-09-30T21:29:16.117 回答