【问题标题】:Weird pagination behavior in CListView in YiiYii 中 CListView 中奇怪的分页行为
【发布时间】:2013-11-12 12:35:10
【问题描述】:

我是 Yii 和 php 新手,我正在尝试基于 Yii 教程网站生成的默认索引页面(使用 CListView)制作页面。 gii 生成了我的模型和带有控制器的 CRUD 和索引页面有将近 100 页,我想要做的就是:

添加一个文本字段和一个按钮,以通过“控制器/索引”视图为结果指定条件。

例如我想添加一个过滤器“年份”,所以我在 CListView 上方添加了一个表单:

<?php $this->beginWidget('CActiveForm', array('id'=>'fromid')); ?>
   <?php echo CHtml::textField('year');?>
   <?php echo CHtml::submitButton('search',array('submit'=>'index.php?r=mycontroller/index')); ?>
<?php $this->endWidget(); ?>

因此,通过单击按钮,它将发布带有来自 id 'year' 的文本字段值的提交操作。我在控制器中捕捉到这样的动作:(在 mycontroller 中)

public function actionIndex()
{
    if(isset($_POST['year']))
    {
        $y = (int)$_POST['year'];
        $dataProvider=new CActiveDataProvider('Model',array('criteria'=>array('condition'=>'date='.$y);
        $this->render('index',array('dataProvider'=>$dataProvider));
    }
    else
    {
        $dataProvider=new CActiveDataProvider('Model');
        $this->render('index',array('dataProvider'=>$dataProvider));
    }

}

上面的代码运行良好。我输入了一年并单击按钮,刷新了年龄并过滤了结果。但问题是,如果结果分页分页(比如2页),我点击下一页按钮,过滤后的结果就没有了!,结果又回到了100页再次。我真的不知道这是怎么回事。

Clistview 很简单,这里我没有添加任何额外的属性:

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

那么我的代码有什么问题?

【问题讨论】:

    标签: php yii pagination


    【解决方案1】:

    您正在使用 $_POST,当您导航到下一页时,$_POST['year'] 数据会丢失,因为您没有将其发布到第 2、3 页等。

    你可以做两件事:

    • $_POST['year'] 存储在会话中,以便下一页“知道”它必须使用哪一年
    • 将其作为 $_GET 参数存储在 url 中,因此请使用 $_GET['year'] 代替 $_POST['year']。当您导航到第 2 页时,$_GET['year'] 在下一页的 URL 中可用。

    最后一个是我认为最简单的一个,也是我通常使用它的方式。

    如果您使用 get 方法,请将 CActiveForm 行更改为:

    <?php $this->beginWidget('CActiveForm', array(
             'id'=>'fromid',
             'method' => 'get'
    )); ?>
    

    【讨论】:

    • 非常感谢!!!!所以我只是简单地用'$_GET'替换'$_POST'?就这么简单吗?
    • 是的,将 CActiveForm 中的“方法”更改为“获取”,这样就可以了(请参阅我的编辑)。请考虑使用有界参数而不是$date='.$y,这样更安全!
    • 我在这里仍然需要一点帮助:我将代码更改为使用 GET 参数,效果很好!除了每次我单击搜索时,在 url 中不断附加的参数会使 url 越来越长。 -_-!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 2012-04-17
    相关资源
    最近更新 更多