【问题标题】:CListView pager doesn't work with custom CSqlDataProvider in YiiCListView 寻呼机不适用于 Yii 中的自定义 CSqlDataProvider
【发布时间】:2014-05-03 20:21:20
【问题描述】:

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

我想问题是我只在表单提交时在控制器中定义我的数据提供者,但我无法弄清楚每次调用寻呼机时如何传递我的数据提供者。我尝试修改控制器中的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',));
        }
?>

【问题讨论】:

    标签: php ajax yii


    【解决方案1】:

    分页使用 GET 方法,所以这个 if(isset($_POST['Kivetes'])) 将是错误的,你应该为你的表单使用 GET 方法。

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

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

    【讨论】:

    • 抱歉我的回复晚了。你指的是我的模型(Kivetes)而不是分页。我照看了一下,似乎没有解决我的问题的直截了当的方法。看来我需要编写自己的寻呼机。我在 Yii 社区论坛上找到了这个:yiiframework.com/forum/index.php/topic/….
    猜你喜欢
    • 1970-01-01
    • 2012-05-16
    • 2015-07-21
    • 2012-01-15
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多