我正在使用Yii2-advanced-app。我对像这样的弹出窗体采取了一些操作 -
当我们点击弹出窗口中的“创建”按钮时,它会创建一些记录&将我们重定向到同一页面,即localhost / abcd / backend / web / index.php?r = xyz / create。 这是我为此写的代码 -
public function actionCreateitem()
{
$model = new Items();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['create', 'id' => $_SESSION['ro_id']]);
} else {
return $this->renderAjax('itemform', [
'model' => $model,
]);
}
}
在这里,我再次在创建表单/页面上重定向页面。没关系。但是当用户填写整个表格时然后他想“添加项目”,他点击添加按钮&在弹出窗口中创建它。但是在提交弹出窗体后,创建页面上的所有字段都会被清除,这是他最近填写的(因为我们重定向它)。 我需要在提交弹出窗口后不应刷新/重定向页面的场景,它应保留在同一页面上,以便用户输入的数据在页面上保持安全。 / EM> 因此,在创建一个项目后,他将获得这样的创建页面 -
答案 0 :(得分:0)
我是这样做的 (所有新建议也欢迎) -
添加项目弹出窗口 -
<?php
$this->registerJs("$('#createitem').click(function() {
var itemName = $('#items-item_name').val();
var sku = $('#compitems-sku').val();
var itemDesc = $('#items-item_description').val();
$('#modalItem .close').click();
$.get('?r=xyz/createitem&itemName='+itemName+'&sku='+sku+'&itemDesc='+itemDesc, function(success){
$('.refreshitem').html(success);
});
});");
?>
<div class="items-form">
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'item_name')->textInput(['maxlength' => true]) ?>
<?= $form->field($modelCI, 'SKU')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'item_description')->textArea(['rows' => 5]) ?>
<div class="form-group"><p align="right">
<button id="createitem" type="button" class="btn btn-success">Create</button></p>
</div>
<?php ActiveForm::end(); ?>
</div>
我的选择列表&amp;实际创建表单上的“添加(+)”按钮 -
<?= $form->field($model, "[{$i}]item_id")->dropDownList(ArrayHelper::map(Items::find()->where(['deleted' => 'N'])->all(),'id','item_name'),['prompt'=>'Select Item', 'class' => 'form-control refreshitem']) ?>
<button id="modalButtonItem" class="btn btn-default" type="button" value="?r=xyz/createitem&itemName=0&sku=0&itemDesc=0" onclick="itemModal(1);">+</button>
控制器方法 -
public function actionCreateitem($itemName, $sku, $itemDesc)
{
$model = new Items();
$modelCI = new CompItems();
if ($itemName != '0' && $sku != '0' && $itemDesc != '0') {
$itemExist = Items::find()->select('id')->where(['item_name' => $itemName])->one();
if(count($itemExist) == 0) {
$model->item_name = isset($itemName) ? $itemName : 'NULL';
$model->item_description = !empty($itemDesc) ? $itemDesc : $itemName;
$model->save();
}
$items = Items::find()->where(['deleted' => 'N'])->all();
foreach ($items as $item) {
echo '<option value="'.$item->id.'">'.$item->item_name.'</option>';
}
} else {
return $this->renderAjax('itemform', [
'model' => $model, 'modelCI' => $modelCI
]);
}
}