2015-09-23 47 views
3

我正在學習Yii2,試圖使用它來製作一個項目。添加新的列表選項,動態刷新更新列表

我收到了一些表單。我想實現在旅途中添加新列表選項的功能。

當前點擊「添加新選項」按鈕調用彈出窗體。提交後,Yii帶我到這個新選項的頁面。原因如下:

public function actionCreate() 
{ 
    $model = new Request(); 

    if ($model->load(Yii::$app->request->post()) && $model->save()) { 
     return $this->redirect(['view', 'id' => $model->id]); 
    } else { 
     return $this->render('create', [ 
      'model' => $model, 
      'manager' => Stuff::find()->all(), 
      'movercompany' => MoverCompany::find()->all(), 
      'worktype' => Worktype::find()->all(), 
      'customer' => Customer::find()->all(), 
     ]); 
    } 
} 

我在submittimg後想要的只是刷新更新列表並選擇新選項。

我該怎麼做?

_form.php這個:

<?php 

use yii\helpers\Html; 
use yii\helpers\ArrayHelper; 
use yii\helpers\Url; 
use yii\widgets\ActiveForm; 
use kartik\select2\Select2; 
use yii\bootstrap\Modal; 

/* @var $this yii\web\View */ 
/* @var $model app\models\Request */ 
/* @var $form yii\widgets\ActiveForm */ 
?> 

<div class="request-form"> 

    <?php 
     $form = ActiveForm::begin(); 
     date_default_timezone_set("Europe/Moscow"); 
     $model->request_date = date('Y-m-d'); 
     $model->request_time = date('H:i'); 
    ?> 

    <?= $form->field($model, 'request_date')->widget(\yii\jui\DatePicker::classname(), [ 
     'language' => 'ru', 
     'dateFormat' => 'yyyy-MM-dd', 
    ]) ?> 

    <?= $form->field($model, 'request_time')->textInput(['style' => 'width: 70px;']) ?> 

    <?= $form->field($model, 'customer_id')->widget(Select2::classname(), [ 
     'data' => ArrayHelper::map($customer, 'id', 'fullInfo'), 
     'language' => 'ru', 
     'options' => ['placeholder' => 'Выбрать клиента...'], 
     'pluginOptions' => [ 
      'allowClear' => true 
     ], 
    ]);?> 

    <?= $form->field($model, 'KP_id')->textInput() ?> 


    <?= $form->field($model, 'quantity')->input('number', ['style' => 'width: 75px;']) ?> 
    <div> 

     <?= $form->field($model, 'request_type')->dropDownList(
      ArrayHelper::map($worktype, 'id', 'title'), 
      array('prompt' => 'Выберите вид работ:', 'style' => 'width: 200px;') 
     ) ?> 

     <?= Html::button('+', ['value' => Url::to('index.php?r=worktype/create'), 'class' => 'btn btn-success', 'id' => 'modalButton']) ?> 

    </div> 
    <?php 
     Modal::begin([ 
       'header' => '<h4>Виды работ</h4>', 
       'id' => 'modal', 
       'size' => 'modal-lg', 
      ]); 
     echo "<div id='modalContent'></div>"; 
     Modal::end(); 
    ?> 

    <?= $form->field($model, 'payment_type')->dropDownList(
     [ 
      '0' => 'Нал', 
      '1' => 'Безнал' 
     ], 
     ['style' => 'width: 80px;']) 
    ?> 

    <?= $form->field($model, 'address')->textarea(['rows' => 2]) ?> 

    <?= $form->field($model, 'minimal_payment')->input('number', ['style' => 'width: 100px;']) ?> 

    <?= $form->field($model, 'mover_company_id')->dropDownList(
     ArrayHelper::map($movercompany, 'id', 'name'), 
     array('prompt' => 'Выберите компанию:', 'style' => 'width: 200px;') 
    ) ?> 

    <?= $form->field($model, 'manager_id')->dropDownList(
     ArrayHelper::map($manager, 'id', 'name'), 
     array('prompt' => 'Выберите менеджера:', 'style' => 'width: 200px;') 
    ) ?> 

    <?= $form->field($model, 'workers_number')->input('number', ['style' => 'width: 100px;']) ?> 

    <?= $form->field($model, 'workhours')->input('number', ['style' => 'width: 100px;']) ?> 

    <?= $form->field($model, 'payment_additional')->input('number', ['style' => 'width: 100px;']) ?> 

    <?= $form->field($model, 'payment_car')->input('number', ['style' => 'width: 100px;']) ?> 

    <?= $form->field($model, 'payment_sum')->input('number', ['style' => 'width: 100px;']) ?> 

    <?= $form->field($model, 'status')->dropDownList(
     [ 
      '0' => 'Открыт', 
      '1' => 'Закрыт' 
     ], 
     ['style' => 'width: 200px;'] 
    ) ?> 

    <?= $form->field($model, 'comment')->textarea(['rows' => 2]) ?> 

    <div class="form-group"> 
     <?= Html::submitButton($model->isNewRecord ? 'Создать' : 'Обновить', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> 
    </div> 

    <?php ActiveForm::end(); ?> 

</div> 
+0

用表格顯示整個代碼。 –

+0

@InsaneSkulll添加了表單代碼。 – Marat

回答

1

我用未來技術來實現這一點。

我需要在請求表單頁面上動態添加一個選項到公司列表。

  1. 所以首先我們在公司控制器中創建新的動作。它不同於renderAjax而不是render,返回1,而不是帶你到新公司頁面:

    public function actionAdd() {model = new Company();

    if ($model->load(Yii::$app->request->post()) && $model->save()) { 
        echo 1; 
    } else { 
        return $this->renderAjax('create', [ 
         'model' => $model, 
        ]); 
    }; 
    

    }

  2. 添加按鈕,在視圖_form.php這個包含公司名單:

    地址::對( '?的index.php R =公司/加'),' class'=>'btn btn-success','id'=>'modalButton'])?>
  3. 添加彈出窗口,其中包含用於創建新公司的表單。

3.1。模態窗口_form.php這個:

use yii\bootstrap\Modal; 
use yii\widgets\Pjax; 

<?php 
    Modal::begin([ 
     'header' => '<h4>Company<h4>', 
     'id' => 'modal', 
     'size' => 'modal-lg', 
    ]); 

    echo "<div id='modalContent'></div>"; 

    Modal::end(); 
?> 

3.2。將pjax應用於公司名單:

<?php Pjax::begin(['id' => 'companyList']); ?> 
... 
<?php Pjax::end(); ?> 

3.3。編輯資產/ AppAsset.php:

public $js = [ 
    'js/main.js' 
]; 

3.4。創建文件夾和js文件web/js/main.js:

$(function(){ 
    $('#modalButton').click(function(){ 
     $('#modal').modal('show') 
      .find('#modalContent') 
      .load($(this).attr('value')); 
    }); 
}); 

3.5。添加腳本到公司_form.php這個:

<?php 

$script = <<< JS 

$('form#{$model->formName()}').on('beforeSubmit', function(e) 
{ 
    var \$form = $(this); 
    $.post(
     \$form.attr("action"), // serialize yii2 form 
     \$form.serialize() 
    ) 
     .done(function(result) { 
     if(result == 1) 
     { 
      $(document).find('#modal').modal('hide'); 
      $.pjax.reload({container:'#companyList'}); 
      $(document).on('pjax:complete', function() { 
       $('#customer-company_id option:last-child').attr('selected', true); 
      }) 
     }else 
     { 
      $(\$form).trigger("reset"); 
      $("#message").html(result.message); 
     } 
     }).fail(function() 
     { 
      console.log("server error"); 
     }); 
    return false; 
}); 

JS; 

$this->registerJs($script); 

?> 

下面是我們所擁有的:按Add按鈕彈出,形式與新的選項屬性。提交此表單將關閉彈出窗口,刷新公司列表並選擇最後一個選項。很粗魯,但它的作品。