M
M
Maksim862019-09-24 14:09:36
Yii
Maksim86, 2019-09-24 14:09:36

Dependent dropDoun does not work, what am I doing wrong?

Hello! I have a problem, I am making a form in yii2 with dropdowns. Here is the controller:

public function actionCreate($id = 0)
    {
        $model = new Product();
        $id = (int)Yii::$app->request->post('id');
        $products = [];
        $categories = [];
        $subcategories = [];
        $catalog = Catalog::find()->all();
        $categories = ArrayHelper::index (Catalog::find()
                ->where(['.parent_id' => "NULL"])
                ->all(), 'id');
        if(array_key_exists($id, $categories))
        {
            $subcategories = ArrayHelper::index (Catalog::find()
                    ->where(['.parent_id' => $id])
                    ->all(), 'id');
        }
        if(array_key_exists($id, $subcategories))
        {
            $products = ArrayHelper::index (Catalog::find()
                    ->where(['.parent_id' => $id])
                    ->all(), 'id');
        }
        
        if ($model->load(Yii::$app->request->post()) && $model->save())
        {
            return $this->redirect(['index', 'id' => $model->id]);
        }

        return $this->render('index', [
            'products' => $products,
            'categories' => $categories,
            'subcategories' => $subcategories,
            'products' => $products,
            'items' => $model,
            'id' => $model->id,
            'org' => Organization::getOrgListByUserId(Yii::$app->user->id)
        ]);
    }

And this is view
<?php $form = ActiveForm::begin(['options' => ['class' => 'products-edit-form']]); ?>
    <div class="products-form">
        <div class="inner-products-form">
            <div class="products-toolbox clearfix">
                <div class="products-icon">
                    <?=
                        Html::a(Html::tag('span', '', ['class' => 'glyphicon glyphicon-floppy-saved', ]), '', [
                            'title' => Yii::t('app','Save'),
                            'data' => [
                                'method' => 'post',
                                'params' => [
                                    'action' => 'create'
                                ]
                            ],
                        ]);
                    ?>
                    <?=
                        Html::a(Html::tag('span', '', ['class' => 'glyphicon glyphicon-floppy-remove']), '/products/index?id=' . $model->id, [
                            'title' => Yii::t('app','Cancel'),
                            'data-pjax' => '1',
                        ]);
                    ?>
                </div>
            </div>
            <div class="products-edit bg">
                <div class="inner-products-edit bgcolor">
                    <?= $form->field($model, 'id')->hiddenInput()->label(false) ?>
                    <?= $form->field($model, 'art')->textInput(['maxlength' => true]) ?>
                    <?= $form->field($model, 'shtrih')->textInput(['maxlength' => true]) ?>
                    <?= $form->field($model, 'price')->textInput(['maxlength' => true]) ?>
                    <?= $form->field($model, 'date')->textInput() ?>
                    <?= $form->field($model, 'group')->dropDownList(ArrayHelper::map($categories, 'id', 'name'),
                         [
                             'prompt' => 'Выбрать группу...',
                             'onchange' => '
                                $.post(
                                 "'.Url::toRoute('/products/create').'",
                                 {id : $(this).val()},
                                 function(data){
                                     $("select#podgroup").html(data).attr("disabled", false)})'
                         ]) ?>
                    <?= $form->field($model, 'podgroup')->dropDownList(ArrayHelper::map($subcategories, 'id', 'name'),
                         [
                             'prompt' => 'Выбрать подгруппу...',
                             'onchange' => '
                                $.post(
                                 "'.Url::toRoute('/products/create').'",
                                 {id : $(this).val()},
                                 function(data){
                                     $("select#name").html(data).attr("disabled", false)})'
                         ]) ?>
                    <?= $form->field($model, 'name')->dropDownList(ArrayHelper::map($products, 'id', 'name'),
                         [
                             'prompt' => 'Выбрать подгруппу...',
                             'id' => '$products',
                             'disabled' => $model->isNewRecord ? 'disabled' : false
                         ]) ?>
                    <?= $form->field($model, 'size')->textInput(['maxlength' => true]) ?>
                    <?= $form->field($model, 'podrobno')->textInput() ?>
                    <?= $form->field($model, 'add_pole')->textInput(['maxlength' => true]) ?>
                    <?= $form->field($model, 'org_id')->label(Yii::t('app', 'Person'))->dropDownList($org, ['prompt' => Yii::t('app', 'Select Organization...')]) ?>
                </div>
            </div>
        </div>
    </div>
<?php ActiveForm::end(); ?>
У меня одна таблица в базе, с указанными собственными id и родительскими. Первый список (категории) работает, по выбору категории сразу перехожу в action контроллера, где создаётся массив $subcategories, он не пустой при прохождении в форму, но по завершении выполнения кода выпадающий список subcategories пуст. Подозреваю, что надо в форме что то менять, видимо при возврате из контроллера в форму требуется снова выбирать $categories  в форме, поэтому subcategories пуст. Что не так делаю, подскажите пожалуйста

Answer the question

In order to leave comments, you need to log in

1 answer(s)
D
Dmitry, 2019-09-25
@Maxim86

Good afternoon.
And what is still not working?
And your code leaves much to be desired.
Here is a slightly better example

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question