Answer the question
In order to leave comments, you need to log in
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)
]);
}
<?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
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question