在Yii中,CListView寻呼机不能与自定义CSqlDataProvider一起使用

时间:2014-05-03 20:21:20

标签: php ajax yii

我正在尝试使用CListView在Yii中整理报告。在我看来,我在表单上有两个日期选择器来设置报告的数据范围。一旦我提交表单,它就会正确返回第一条记录,但在我点击寻呼机后,它会呈现我的主页而不是下一条记录。

我想问题是我只在表单提交时在控制器中定义我的数据提供程序,但我无法弄清楚每次调用pager时如何通过我的数据提供程序。我尝试修改控制器中的if条件以检查是否已发布page,但它也不起作用。我需要使用Ajax吗?重要的是,如果可能的话,我希望两个日期选择器都出现在所有页面的表格顶部。

有人可以帮帮我吗?

我的控制器:

    public function actionView()
    {
        $model=new Kivetes;
        $egyedi_etel_idk = array();
        $sqlProvider = array();
        if(isset($_POST['Kivetes']))
        {
            $model->attributes=$_POST['Kivetes'];

            $count = Yii::app()->db->createCommand("SELECT COUNT(osszerendeles.etel_id)
                      FROM `ff_etlap` etlap 
                        INNER JOIN `ff_etlap_osszerendeles` osszerendeles ON etlap.id = osszerendeles.etlap_id
                      WHERE etlap.datum >= '".$model->datum_tol."' AND etlap.datum <= '".$model->datum_ig."'
                      GROUP BY osszerendeles.etel_id")->queryScalar();

            $sql_egyedi_etel_idk = "SELECT osszerendeles.etel_id as 'etel_id'
                                    FROM `ff_etlap` etlap 
                                    CS  INNER JOIN `ff_etlap_osszerendeles` osszerendeles ON etlap.id = osszerendeles.etlap_id
                                    WHERE etlap.datum >= '".$model->datum_tol."' AND etlap.datum <= '".$model->datum_ig."'
                                    GROUP BY osszerendeles.etel_id";

            $sqlProvider = new CSqlDataProvider($sql_egyedi_etel_idk, array(
                    'keyField' => 'etel_id',
                    'totalItemCount'=>$count,
                    'pagination'=>array(
                            'pageSize'=>'1',
                    ),
            ));

        }

        $this->render('view',array('model'=>$model,
                                   'dataProvider'=>$sqlProvider));
    }

}

我的观点:

    <?php setlocale(LC_ALL, "hu_HU.UTF-8"); ?>

<div class="form">

    <?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(
        'id'=>'kivetes-form',
        'enableAjaxValidation'=>false,
    )); ?>

    <?php
        $today = date('Y-m-d');
        $day_number = date('N', strtotime($today));
        $first_day = $day_number - 1;
        $last_day = 7- $day_number;
    ?>

    <fieldset>
        <?php echo $form->labelEx($model,'datum_tol'); ?>
        <?php $this->widget('zii.widgets.jui.CJuiDatePicker',array(
                        'name'=>'datepicker_tol',
                        'language'=>'hu',
                        'model'=>$model,
                        'attribute'=>'datum_tol',
                        // additional javascript options for the date picker plugin
                        'options'=>array(
                            'showAnim'=>'slide',//'slide','fold','slideDown','fadeIn','blind','bounce','clip','drop'
                            'dateFormat'=>'yy/mm/dd',
                            'showWeek' => 'true',
                            'minDate' => -$first_day,
                            'maxDate' => $last_day,
                        ),
              ));
        ?>

        <?php echo $form->labelEx($model,'datum_ig'); ?>
        <?php $this->widget('zii.widgets.jui.CJuiDatePicker',array(
                        'name'=>'datepicker_ig',
                        'language'=>'hu',
                        'model'=>$model,
                        'attribute'=>'datum_ig',
                        // additional javascript options for the date picker plugin
                        'options'=>array(
                            'showAnim'=>'slide',//'slide','fold','slideDown','fadeIn','blind','bounce','clip','drop'
                            'dateFormat'=>'yy/mm/dd',
                            'showWeek' => 'true',
                            'minDate' => -$first_day,
                            'maxDate' => $last_day,

                        ),
              ));
        ?>

        </br>
        <?php $this->widget('bootstrap.widgets.TbButton', array(
                            'type'=>'primary',
                            'label'=>'Listázás',
                            'url'=>'',
                            'htmlOptions'=>array('onclick' => '$("#kivetes-form").submit()'),
    )); ?>
    </fieldset>
    <?php $this->endWidget(); ?>
</div><!-- form -->

<?php 
        if (!empty($model->datum_tol))
        {
            $this->widget('zii.widgets.CListView', array(
                    'dataProvider'=>$dataProvider,
                    'itemView'=>'_kivetes',));
        }
?>

1 个答案:

答案 0 :(得分:0)

分页使用GET方法,因此if(isset($_POST['Kivetes']))将为false,您应该为表单使用GET方法。

if(isset($_GET['Kivetes']))
     {

<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(
    'id'=>'kivetes-form',
    'enableAjaxValidation'=>false,
    'method'=>'get'
)); ?>