Yii刷新网格在DropDown更改

时间:2014-04-16 17:50:52

标签: drop-down-menu yii

在YII视图文件夹中我有测试模块和管理内容的admin.php文件在下面,我在这里渲染表单,我把表格和下拉列表放在其中,我希望下拉列表中的状态更改的网格刷新值 假设我选择"已批准"比网格显示状态被批准的数据

    <?php
Yii::app()->clientScript->registerScript('dropdown', "

$('.dropdown-form form').submit(function(){
$('#testimonial-grid').yiiGridView('update', {
        data: $(this).serialize()
    });
    return false;
});
");
?>
<h1>Manage Testimonials</h1>
<div class="dropdown-form">
<?php $this->renderPartial('_dropdownform',array(
    'model'=>$model,
)); ?>
</div><!-- search-form -->
    <?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'testimonial-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        'id',
        'created_by',
        'test_name',
        'test_email',
        'comments',
        'created_at',
        /*
        'status',
        'approved_on',
        'approved_by',
        */
        array(
            'class'=>'CButtonColumn',
        ),
    ),
)); ?>

下面的表单是_dropdownform,它包含来自此下拉列表的表单和下拉列表我选择状态值

<div class="wide form">
    <?php
    $form = $this->beginWidget('CActiveForm', array(
        'action' => Yii::app()->createUrl($this->route),
        'method' => 'get',
    ));
    ?>
    <div class="row">
        <?php
        echo CHtml::dropDownList('status', '', array(0 => 'New', 1 => 'Approved', 2 => 'Declined'), array(
            'prompt' => 'Select Status',
            'ajax' => array(
                'type' => 'POST',
                'url' => Yii::app()->createUrl('testimonial/loadthedata'), 
                //or $this->createUrl('loadcities') if '$this' extends CController
                'update' => '#testimonial-grid', //or 'success' => 'function(data){...handle the data in the way you want...}',
                'data' => array('status' => 'js:this.value'),
        )));
        ?>
    </div>

    <div class="row buttons">
<?php //echo CHtml::submitButton('Search');   ?>
    </div>
        <?php $this->endWidget(); ?>
</div><!-- search-form -->

并且我的控制器中的代码或者在DROPDOWN中提供的数据是以下操作,但我不知道如何从这个功能获取数据并通过网格视图

public function actionloadthedata() {
    if (isset($_POST['status'])) {
        $status = $_POST['status'];
       if($status==0){
           $status='New';
       }
       if($status==1){
           $status='Approved';
       }
       if($status==2){
           $status='Declined';
       }
        Testimonial::model()->findByAttributes(array('status'=>$status));


    }
}

3 个答案:

答案 0 :(得分:1)

您可以使用CGridView属性filterCssClass链接网格过滤器,例如

$this->widget('CGridView', array(
    'id' => 'my-list',
    'filterCssClass' => '#filterFormId .filter',

还有过滤形式

<?php $form = $this->beginWidget('CActiveForm', array(
    'id' => 'filter-fomr-id',
)); ?>

<div class="filter clearfix">
    <?php echo $form->dropDownList($model, 'name', [0=>'all', '1'=>'some else']); ?>
</div>

在特定于您表单的jquery选择器上替换#filterFormId .filter。换句话说,为过滤器表单设置id属性,然后使用&#34; #THISID .row&#34;。

答案 1 :(得分:0)

感谢@Alex的帮助,但我成功地为网格做了过滤,代码正在关注但是请你告诉我,我希望网格只显示status = New的值,当页面加载网格显示时我该怎么做状态为新的值 但首先我粘贴网格下拉过滤器的工作代码 这是我的admin.php文件

    <?php
$this->breadcrumbs = array(
    'Testimonials' => array('index'),
    'Manage',
);
$this->menu = array(
    array('label' => 'List Testimonial', 'url' => array('index')),
    array('label' => 'Create Testimonial', 'url' => array('create')),
);
?>
<h1>Manage Testimonials</h1>
<!-----------drop down form------------->
<?php
Yii::app()->clientScript->registerScript('dropdownfilter', "

$('.dropdown-form form #staticid').change(function(){
    $.fn.yiiGridView.update('testimonial-grid', {
        data: $(this).serialize()
    });
    return false;
});
");
?>
<div class="dropdown-form">
    <?php
    $this->renderPartial('_dropdownfilter', array(
        'model' => $model,
    ));
    ?>
</div><!-- search-form -->
<?php
$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'testimonial-grid',
    'dataProvider' => $model->search(),
   // 'filter' => $model,
    'columns' => array(
        'id',
        'created_by',
        'test_name',
        'test_email',
        'comments',
        'created_at',
        'status',
        array(
            'class' => 'CButtonColumn',
        ),
    ),
));
?>

这是我的渲染部分形式,我放置静态下拉

<div class="wide form">
<?php
$form = $this->beginWidget('CActiveForm', array(
    'action' => Yii::app()->createUrl($this->route),
    'method' => 'get',
));
?>
<div class="row">
    <?php
    echo CHtml::dropDownList('staticid', '', array('0' => 'New', '1' => 'Approved', '2' => 'Declined'), array(
        // 'onChange' => 'this.form.submit()',
        'ajax' => array(
            'type' => 'POST', //request type
    )));
    ?>
</div>
<?php $this->endWidget(); ?>

以下是我在控制器中管理的代码

public function actionAdmin() {
    $model = new Testimonial('search');
    $model->unsetAttributes();  // clear any default values
    if (isset($_GET['staticid'])) {
        $getStatus = $_GET['staticid'];
        if ($getStatus == 0)
            $status = 'New';
        if ($getStatus == 1)
            $status = 'Approved';
        if ($getStatus == 2)
            $status = 'Declined';
        $model->status = $status;
    }
    if (isset($_GET['Testimonial']))
        $model->attributes = $_GET['Testimonial'];
    $this->render('admin', array(
        'model' => $model,
    ));
}

现在我希望当actionadmin第一次触发时它显示status = New values

答案 2 :(得分:0)

在gridview文件中,请确保您拥有以下代码:

Yii::app()->clientScript->registerScript('search', "
$('.search-button').click(function(){
    $('.search-form').toggle();
    return false;
});
$('.search-form form').submit(function(){
    $('#ad-grid').yiiGridView('update', {
        data: $(this).serialize()
    });
    return false;
});
");

然后在CGridView定义中:

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'testimonial-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        ...
        array(
            'name'=>'Status',
            'filter'=>CHtml::dropDownList('YourModel[status]', $model->status, array(0 => 'New', 1 => 'Approved', 2 => 'Declined'), array('empty' => '--all--') ),
            'value'=>'( $data->status == 0) ? "New": ( $data->status == 1) ? "Approved" : "Declined"',
            'htmlOptions' => array(
                'style' => 'width: 40px; text-align: center;',
            ),
        ),
        ...
        array(
            'class'=>'CButtonColumn',
        ),
    ),
));
// CGridView 

为了在'value'部分中保存if / else,您可以在模型中实现一个返回与整数关联的字符串的方法。

效果很好,只需使用默认Yii admin.php view,您可以根据需要进行编辑。

<强>更新
添加了对空状态的支持,不会过滤查询结果