【问题标题】:How to control page get parameter in Yii CListView?Yii CListView如何控制页面获取参数?
【发布时间】:2012-09-30 21:09:10
【问题描述】:

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

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

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

【问题讨论】:

    标签: url yii


    【解决方案1】:

    另外要更改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,您需要根据 Suvera 的回答稍微更改 urlManager 中的规则:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      前 1:

      'products/&lt;Product_page:\d+&gt;'=&gt;'products/index'

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

      前 2

      'TheAvengers/vs/Loki/&lt;Product_page:\d+&gt;'=&gt;'products/index'

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

      【讨论】:

      • 谢谢,这看起来完美地回答了我的奖金问题。对我的问题的第一部分有什么想法(即将someurl?Product_page=2 变成someurl?page=2 你也可以用 urlManager 解决吗?
      • Product_page:这就是 Yii 创建和理解查询参数的方式...get_class($model).'_page'。你可能需要 apache 重写规则,规则应该重写 page=2 到 Product_page=2 以便 Yii 理解。
      【解决方案3】:

      我认为 CListView 有pager 属性(来自其父类)

      您可以尝试为此设置一些属性。我认为它是 CLinkPager 实例。

      【讨论】:

        猜你喜欢
        • 2012-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多