Как использовать вложенную форму Dynami c с повторно используемой функциональностью - PullRequest
0 голосов
/ 09 марта 2020

Я использую динамическую форму wbraganca / yii2 для Nested Dynami c Форма exmaple. Я хотел создать номер комнаты, который определен в другом поле number_of_rooms, используя функцию Javascript onchange. Функция Onchange работает хорошо.

Q1: вместо увеличения одного за другим, я хочу создать определенный номер комнаты в поле number_of_rooms.

Я пытался PHP _POST метод.

### form. php

<div class="row">
    <div class="col-sm-6">
        <?= $form->field($model, 'number_of_rooms')->dropDownList($model->getNumberList(),['id'=>'number_of_rooms']) ?>     
    </div>
</div>
    <tr>
        <?php
            echo $this->render('_form-person-room', ['form' => $form,'indexRoom' => $modelRoom->isNewRecord ? (strpos($indexRoom, 'new') !== false ? $indexRoom : 'new' . $indexRoom) : $modelRoom->id,'modelsRoom' => $modelsRoom]); 
        ?>

    </tr>

### _form-person-room. php

<?php
use yii\helpers\Html;
use frontend\models\Room;
?>
<?php $_display=' style="display:none;" '; ?>
<?php foreach ($modelsRoom as $indexRoom => $modelRoom):?>
<td> 
<div class="col-md-4" id="numbers_hidden1" <?php  echo $_display ?>>
<?php echo $form->field($modelRoom, 'room[]')->textInput(['id' => 'room001-01', 'maxlength' => true])?>
</div>

<div class="col-md-4" id="numbers_hidden2" <?php  echo $_display ?>>
<?php echo $form->field($modelRoom, 'room[]')->textInput(['id' => 'room001-02', 'maxlength' => true])?>
<?php echo $form->field($modelRoom, 'room[]')->textInput(['id' => 'room002-02', 'maxlength' => true])?>
</div>

<td>
<?php endforeach; ?>

### секция контроллера

foreach ($modelsRoom as $indexRoom => $modelRoom {
    if ($flag === false) {
        break;
    }
    $modelRoom->house_id = $model->id;
    $arrayRoom = $_POST['Room']['room'];
    $modelRoom->room = json_encode($arrayRoom); 

    if (!($flag = $modelRoom->save(false))) {
        break;
    }

}
###

## javascript функция

$('#number_of_rooms').change(function()
{
    var zusId = $(this).val();

    if(zusId==0){
        document.getElementById('numbers_hidden1').style.display = "none";
        document.getElementById('numbers_hidden2').style.display = "none";
    }

     if(zusId==1){
         document.getElementById('numbers_hidden1').style.display = "block";
     }
     if(zusId==2){
        document.getElementById('numbers_hidden2').style.display = "block";     
     }


});

Q2: Когда пользователь нажимает кнопку + на домах, эту же функцию необходимо использовать повторно. Есть идеи, как заставить его работать?

...