Yii中CListView中奇怪的分页行为

时间:2013-11-01 10:05:29

标签: php yii pagination

我是Yii和php的新手,我正在尝试根据Yii教程网站生成的默认索引页面(使用CListView)制作页面。 gii生成了我的模型和CRUD w / controllers和索引页面有近100页,我想做的就是:

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

E.g。我想添加一个过滤器'year',所以我在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(); ?>

通过点击按钮,它将有一个提交动作w /来自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',
)); ?>

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:1)

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

你可以做两件事:

  • $_POST['year']存储在会话中,以便下一页知道&#39;哪一年必须使用
  • 将其作为$ _GET参数存储在网址中,因此代替$_POST['year']使用$_GET['year']。当您导航到第2页时,下一页的网址中会显示$_GET['year']

最后一个是我认为最容易的,这就是我通常使用它的方式。

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

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