在下拉列表中使用ajax部署动态表单yii2

时间:2016-11-27 09:34:08

标签: ajax forms yii2 dynamic-forms

我有一个创建表单,它将值发布到actionCreate(),如

Form - dropdown

Dynamic form depending on the dropdown above

<?php $form = ActiveForm::begin(['id' => 'dynamic-form']);?>

<?=
$form->field($model, 'techpark_id')->dropDownList($techparks, ['prompt' => '- Choose a Techpark -',
    'onchange' => '
            $.get( "' . Yii::$app->urlManager->createUrl('campaign-request/techpark-details?id=') . '"+$(this).val(), function( data ) {
              $( "#details" ).html( data );
            });
        ']);
?>
<div id="details">

        </div>

<div class="form-group">
    <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>

现在下拉列表中的onchange事件 - &gt; techpark_id 会将 ID 发布到广告系列请求/ teckpark-details

Yii::$app->urlManager->createUrl('campaign-request/techpark-details?id=7) 

actionTechparkDetails 会像这样使用下拉列表中的值进行渲染,具体取决于值 $ id

public function actionTechparkDetails($id) {
    $details = [new \app\models\CampaignRequestAdDetails];
    $connection = Yii::$app->getDb();
    $command = $connection->createCommand('
            SELECT adspace_type_id,type,number_of_adspace,number_of_filled,adspace_value FROM `Techpark`  
            JOIN techpark_adspace ON techpark.id = techpark_id 
            JOIN adspace_type ON adspace_type_id = adspace_type.id
            WHERE techpark.id=:id', [':id' => $id]);
    $result = $command->queryAll();
    $adspace_type_id = ArrayHelper::map($result, 'adspace_type_id', 'type');
    return $this->renderAjax('_campaignDetails', [
                'details' => (empty($details)) ? [new \app\models\CampaignRequestAdDetails] : $details,
                'adspace_type_id' => $adspace_type_id
    ]);
}

campaignDetails 有一个动态表单,根据所选的dropdown()值填充值($ id)

我的_campaignDetails.php

<?php $form = ActiveForm::begin(['id' => 'dynamic-form']);?>

<div class="panel panel-default">
<div class="panel-heading"><h4><i class="glyphicon glyphicon-envelope"></i> Campaign details</h4></div>
<div class="panel-body">
    <?php
    DynamicFormWidget::begin([
        'widgetContainer' => 'dynamicform_wrapper', // required: only alphanumeric characters plus "_" [A-Za-z0-9_]
        'widgetBody' => '.container-items', // required: css class selector
        'widgetItem' => '.item', // required: css class
        'limit' => 20, // the maximum times, an element can be cloned (default 999)
        'min' => 4, // 0 or 1 (default 1)
        'insertButton' => '.add-item', // css class
        'deleteButton' => '.remove-item', // css class
        'model' => $details[0],
        'formId' => 'dynamic-form',
        'formFields' => [
            'adspace_type_id',
            'number_of_adspace',
        ],
    ]);
    ?>
    <div class="container-items"><!-- widgetContainer -->
        <?php foreach ($details as $i => $detail): ?>
            <div class="item panel panel-default"><!-- widgetBody -->
                <div class="panel-heading">
                    <div class="pull-right">
                        <button type="button" class="add-item btn btn-success btn-xs"><i class="glyphicon glyphicon-plus"></i></button>
                        <button type="button" class="remove-item btn btn-danger btn-xs"><i class="glyphicon glyphicon-minus"></i></button>
                    </div>
                    <div class="clearfix"></div>
                </div>
                <div class="panel-body">
                    <?php
                    // necessary for update action.
                    if (!$detail->isNewRecord) {
                        echo Html::activeHiddenInput($detail, "[{$i}]id");
                    }
                    ?>
                    <div class="row">
                        <div class="col-sm-4">
                            <?= $form->field($detail, "[{$i}]adspace_type_id")->dropDownList($adspace_type_id) ?>
                        </div>
                        <div class="col-sm-4">
                            <?= $form->field($detail, "[{$i}]number_of_adspace")->textInput() ?>
                        </div>
                    </div><!-- .row -->
                </div>
            </div>
        <?php endforeach; ?>
    </div>
    <?php DynamicFormWidget::end(); ?>

</div>

现在,当我填写表单并提交时,我无法在 actionCreate()中获取表单的值(_campaignDetails.php已部分呈现)。

此外,删除项目无法以动态形式运行。如果在同一个表单中呈现,那将完美地工作(我有另一个表单,可以添加/删除动态表单的项目)。

我正在使用小部件来动态形成github.com/wbraganca/yii2-dynamicform

或者告诉我如何使用不同的方法以任何其他格式/方式实现上述场景。如果你没有得到我想要实现的目标 根据下拉值,我想要一个动态表单,它根据所选值收集输入。

由于

0 个答案:

没有答案