Выпадающий список данных - PullRequest
0 голосов
/ 05 сентября 2018

Это мой код:

[
    'attribute' => 'status',
    'value' => function ($model) {
        return Html::dropDownList('status', ['10' => 'Active', '20' => 'Deactive']);
    },
],

Я просто хочу выпадающий список в столбце статуса Если запись активна или деактивна, она будет выбрана.

enter image description here

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Вам нужно использовать 'format' => 'raw' для опций столбца, а ваше определение для dropDownList() неверно, вам нужно иметь строку выбора в качестве второго параметра и опции раскрывающегося списка в качестве третьего параметра. Измените свой код ниже:

[
    'attribute' => 'status',
    'format' => 'raw',
    'value' => function ($model) {
        return Html::dropDownList('status', $model->status, ['10' => 'Active', '20' => 'Deactive']);
    },
],

EDIT

У вас не было в начальных требованиях того, что вы тоже хотите обновить статус при изменении раскрывающегося списка. Вы можете связать вызов ajax с раскрывающимся списком.

Добавьте следующий javascript поверх вашего представления, где вы инициализируете GridView.

ПРИМЕЧАНИЕ. Измените url:'controller/update-status?id'+id в вызове ajax на соответствующий контроллер, для которого вы хотите обновить статус строки, но не удаляйте id* 1019. *

$js = <<<JS
        $(document).on('ready pjax:success',function(){
            $(".switch-status").on('change',function(){
                var data={};
                data[$(this).attr("name")]=$(this).val();
                var id=$(this).closest("tr").data('key');
                $.ajax({
                    method:'post',
                    url:'/controller/update-status?id='+id,
                    data:data,
                    success:function(data){
                        if(!data.success){
                            alert(data.message);
                        }else{
                            alert("Status updated.");
                        }
                    },
                    error:function(jqXHR, textStatus, errorThrown ){
                        alert(errorThrown);
                    }
                });
            });
        });
JS;
$this->registerJs($js, yii\web\View::POS_END);

Затем внутри столбца GridView для status измените раскрывающийся список на следующий

return Html::dropDownList(Html::getInputName($model, 'active'), $model->active, [10 => 'Active', 20 => 'Deactive'], ['class' => 'switch-status']);

И перейдите к своему контроллеру и добавьте код действия для обновления статуса

Примечание. Измените имя Model в первой строке $model = Model::findOne($id); на соответствующую модель, которую вы используете.

public function actionUpdateStatus($id) {
    $model = Affiliate::findOne($id);
    $app = Yii::$app;
    $request = $app->request;

    if($request->IsAjax && $request->isPost) {

        Yii::$app->response->format = Response::FORMAT_JSON;

        if($model->load($request->post()) && $model->save()) {
            return ['success' => true];
        } else {
            return [
                'success' => false,
                'message' => implode('<br />', ArrayHelper::getColumn($model->errors, '0'))
            ];
        }
    }
}
0 голосов
/ 05 сентября 2018

Используйте content свойство для визуализации элементов HTML. Например:

[
    'attribute' => 'status',
    'content' => function ($model) {
       return Html::dropDownList('status', $model->status, ['10' => 'Active', '20' => 'Deactive']);
    },
],
...