В GridView имеется редактируемый (editable kartik) столбец со статусами (статусы обработки товара). Хочу сделать чтобы при смене статуса, появлялось модальное окно в котором я буду показывать список с радиобоксами в зависимости от самого статуса... То есть если статус "отменен", то из списка модального окна надо выбрать "почему" он был отменен, и также со статусом "приостановлен", только уже другие причины показывать надо в самом модальном окне. После валидации подтверждения и валидации модального окна, сохраняется сам статус.
В GridView
Код: Выделить всё
'editableOptions' => function($model, $key, $index) {
/** @var $model Orders */
return [
'formOptions' => [
'id'=>'states',
'action' => ['orders/states', 'id' => $model->id],
'method'=>'post',
],
'asPopover' => true,
'header'=>'Status',
'inputType'=>Editable::INPUT_DROPDOWN_LIST,
'data' => Orders::getStates($model->Status),
'options' => ['class'=>'form-control', 'prompt'=>'Выберите статус...'],
'submitOnEnter' => false,
];
}
Код: Выделить всё
<?php $form = ActiveForm::begin([
'id' => 'formCauses',
'method' => 'POST',
'validationUrl' => \yii\helpers\Url::toRoute('orders/validation'),
'type' => ActiveForm::TYPE_VERTICAL,
'formConfig' => [
'showErrors' => true,
'deviceSize' => ActiveForm::SIZE_LARGE,
],
]);
?>
<?php
switch ($newState) {
case 'Отменен' :
echo $form->field($model, 'cause',[
'hintType'=>\kartik\form\ActiveField::HINT_SPECIAL,
])->radioList(Orders::getListCausesCancelled())->label('');
break;
case 'Остановлен' :
echo $form->field($model, 'cause')->Orders::getListСausesPause())->label('');
break;
default :
echo '';
break;
}
?>
<?php ActiveForm::end(); ?>
Код: Выделить всё
public function actionMessage($id, $newState = 'Новый')
{
$model = $this->findModel($id);
if ($model ->load(Yii::$app->request->post())) {
if ($model ->save()) {
$this->redirect('index');
} else {
$errors = $model ->errors;
}
}
return $this->renderAjax('message', [
'model'=>$model,
'newState' => $newState,
]);
}
public function actionStates($id)
{
if (isset($_POST['hasEditable']))
{
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$stateId = YII::$app->request->post('editableKey');
$model = $this->findModel($stateId);
$post = [];
$posted = current($_POST['Orders']);
$post['Orders'] = $posted;
$out = Json::encode(['output'=>'', 'message'=>'']);
if ($model->load($post))
{
$newState = $posted['Status'];
// Как вывести модальное окно?
$message = $this->actionMessage($id, $newState);
$this->actionMessage($id, $newState);
// Здесь нужна проверка на валидацию модального окна, если все верно, тогда сохраняю...
if($model->save())
{
if (isset($newState))
{
$output = $model -> Status;
}
$out = Json::encode(['output'=>$output, 'message'=>'']);
}
}
echo $out;
return;
}
}