Изменить статус пользователя из SwitchInput в раскрывающийся список

В настоящее время у меня есть существующий код для отображения статуса пользователя как «Неактивный» или «Активный» на основе поля ban_time таблицы User. Когда статус пользователя «Неактивен», поле ban_time будет обновляться в соответствии с текущим промежутком времени (я предполагаю, что он использует внешний плагин-оболочку)

$form->field($user, 'ban_time')->widget(SwitchInput::classname(), [
            'type' => SwitchInput::CHECKBOX,
            'containerOptions' => ['class' => 'inner-form-group'],
            'pluginOptions' => [
                'state' => empty($user->ban_time),
                'handleWidth' => 60,
                'onText' => 'Active',
                'offText' => 'Inactive'
            ],
            'pluginEvents' => [
                "switchChange.bootstrapSwitch" => "function(event, state) { $('[name=\'User[ban_time]\']').val(state ? 0 : 1) }",
            ]
        ])->label('Status'); 

Теперь мне нужно добавить больше статуса вместо «Неактивный» или «Активный». Итак, я хочу изменить это поле на dropDownList, но при изменении статуса пользователя ban_time не изменилось

$form->field($user, 'ban_time')->dropDownList(
            [empty($user->ban_time) =>'Active', !empty($user->ban_time) =>'Inactive']
        )->label('Status'); 

Помогите пожалуйста как изменить


person Quan Nguyen    schedule 17.11.2015    source источник
comment
Так в чем же проблема? Отображается раскрывающийся список? Или сохранить ban_time?   -  person arogachev    schedule 17.11.2015
comment
Проблема сохранения ban_time   -  person Quan Nguyen    schedule 17.11.2015
comment
Как это обрабатывается сейчас?   -  person arogachev    schedule 17.11.2015
comment
Также некорректно отображается выпадающий список. Ключи элементов должны быть фактическими значениями состояния, а не логическими значениями, и они не должны быть связаны с ban_time.   -  person arogachev    schedule 17.11.2015
comment
Старый код отображает статус на основе проверки ban_time на значение null или нет. Поэтому я хочу сохранить эту логику   -  person Quan Nguyen    schedule 17.11.2015


Ответы (2)


например, если у вас есть раскрывающийся список, подобный приведенному ниже

  echo $form->dropDownListGroup(
                    $model, 'status', array(
                'wrapperHtmlOptions' => array(),
                'widgetOptions' => array(
                    'data' =>$model->getDropdownvalue(),
                    'htmlOptions' => array(
                        'prompt' => 'Select Project',
                        'ajax' => array(
                                'type' => 'POST',
                                'url' => your url,
                                //'dataType' => 'json',
                                'data'=>array('status'=>'js:this.value'),

                              )

в вашем контроллере вы получите значение выпадающего списка, используя URL

public function actiondropdownvalue(){
$model = new status();
        $status = $_POST['status'];
       $model->save();

этот пример только показывает, как это будет работать. Вам понадобится идентификатор пользователя, чтобы сохранить статус для конкретного пользователя, чтобы обновить или сохранить статус.

person Amitesh Kumar    schedule 18.11.2015

Вы можете сделать свой элемент формы как dropDownList как

     $items = [1 =>'Active', 0 =>'Inactive' ,2 => 'Subscribed' ,3 => 'Deleted'];
     $form->field($user, 'ban_time')->dropDownList($items)->label('Status'); 

См. DropDownList.

person Double H    schedule 17.11.2015
comment
Как писал пользователь, актуальной проблемой является сохранение ban_time, а не отображение выпадающего списка. Также это нехороший пример, значения должны быть константами в модели, а список пар значение-метка извлекается с помощью отдельного статического метода. View не должен показывать это. Также это нарушает принцип DRY. - person arogachev; 17.11.2015
comment
Но как я могу обновить значение и установить для него значение по умолчанию? - person Quan Nguyen; 17.11.2015
comment
@KenNguyen Обновите свой вопрос, указав дополнительную информацию, потому что в текущем состоянии он неясен. - person arogachev; 17.11.2015