Динамическое изменение select в yii2

98
27 июня 2021, 01:20

Вообщем у меня возникла такая проблема мне надо изменять значения select основываясь на другом select, у меня есть форма вот её часть:

<div class="add-store__col">
    <div class="add-store__box">
        <?= $form->field($modelShop, 'tariff_id')->dropDownList(ArrayHelper::map($tariffs, 'id', 'name'), ['prompt' => 'Выберите тариф', 'class' => 'jsx-select input choose__name'])->label('Тариф'); ?>
    </div>
</div>
<div class="add-store__col add-store__col_w100">
    <div class="add-store__box">
        <div class="field">
            <p class="field__text">Доп услуги</p>
        </div>
        <?= Html::activeDropDownList($modelShop, 'addition[]', ArrayHelper::map($tariffs, 'id', 'name'), ['multiple' => 'multiple', 'class' => 'field-select']); ?>
        </div>
    </div>
</div>

Первый select это тот на которым я основываюсь. Вот мой массив:

[0] => Array
    (
        [id] => 4
        [created_at] => 1564749503
        [updated_at] => 1564749503
        [name] => Maxi
        [cost] => 1900.00
        [about] => 
        [drop] => 0
        [status] => 1
        [maximum] => 0
        [term] => 
        [tariffAdditionQty] => Array
            (
            )
    )
[1] => Array
    (
        [id] => 5
        [created_at] => 1564749532
        [updated_at] => 1567161599
        [name] => Ultimate
        [cost] => 2400.00
        [about] => 
        [drop] => 0
        [status] => 1
        [maximum] => 1
        [term] => 
        [tariffAdditionQty] => Array
            (
                [0] => Array
                    (
                        [tariff_id] => 5
                        [addition_id] => 3
                        [status_con] => 2
                        [addition] => Array
                            (
                                [id] => 3
                                [created_at] => 1567082635
                                [updated_at] => 1567082635
                                [name] => Доп. услуга 1
                                [cost] => 250.00
                                [about] => 
                                [type] => 1
                            )
                    )
                [1] => Array
                    (
                        [tariff_id] => 5
                        [addition_id] => 5
                        [status_con] => 5
                        [addition] => Array
                            (
                                [id] => 5
                                [created_at] => 1567082657
                                [updated_at] => 1567082657
                                [name] => Доп. услуга 3
                                [cost] => 750.00
                                [about] => 
                                [type] => 0
                            )
                    )
            )
    )

Вообщем в первый select идут данные основные данные, а во второй должны подставлять данные из подмассива 'tariffAdditionQty', ну и соответственно не подставляться если он пустой, но я не знаю как точно мне это сделать, прошу помощи.

Answer 1

Ну вообщем я нашел ответ на свой вопрос честно говоря это похоже на костыль. Код формы:

<div class="add-store__col">
    <div class="add-store__box">
        <?= $form->field($modelShop, 'tariff_id')->dropDownList(ArrayHelper::map($tariffs, 'id', 'name'), ['prompt' => 'Выберите тариф', 'class' => 'jsx-select input choose__name'])->label('Тариф'); ?>
    </div>
</div>
<?php foreach ($tariffs as $key => $tariff): ?>
    <?php if ($key == 0): ?>
        <div class="add-store__col add-store__col_w100 addition_block" id="tariff_<?= $tariff['id']; ?>">
            <div class="add-store__box">
                <div class="field">
                    <p class="field__text">Доп услуги</p>
                </div>
                <?= Html::activeDropDownList($modelShop, 'addition[]', ArrayHelper::map($tariff['tariffAdditionQty'], 'addition_id', 'addition.name'), ['multiple' => 'multiple', 'class' => 'field-select_' . $tariff['id']]); ?>
            </div>
        </div>
    <?php else: ?>
        <div class="add-store__col add-store__col_w100 addition_block" id="tariff_<?= $tariff['id']; ?>" style="display:none;">
            <div class="add-store__box">
                <div class="field">
                    <p class="field__text">Доп услуги</p>
                </div>
                <?= Html::activeDropDownList($modelShop, 'addition[]', ArrayHelper::map($tariff['tariffAdditionQty'], 'addition_id', 'addition.name'), ['multiple' => 'multiple', 'class' => 'field-select_' . $tariff['id']]); ?>
            </div>
        </div>
    <?php endif; ?>
<?php endforeach; ?>

И js код который творит "магию замены":

 $('select[name="Shops[tariff_id]"]').on('change', function(e) {
    let id = $(this).val();
    $('.addition_block').each(function(index, value) {
        if ('tariff_' + id == $(this).attr('id')) {
            $(this).css({'display':'block'});
        } else {
            $(this).css({'display':'none'});
        }
    });
});
READ ALSO
Как отсортировать товар по рейтингу категории с сохранения id laravel

Как отсортировать товар по рейтингу категории с сохранения id laravel

Есть таблица с товарами и таблица с категориями, у категорий есть рейтинг Нужно отсортировать товар по рейтингу категорий Вот, что у меня...

83
Hе переопределяет путь к PHP on MAMP

Hе переопределяет путь к PHP on MAMP

у меня на данный момент стоит php 71

107
Bad request 400 при попытке загрузить post-запросом jpg картинку на сайт

Bad request 400 при попытке загрузить post-запросом jpg картинку на сайт

Пытаюсь загрузить на сервер сайта картинкув Mozille через инструмент Network посмотрел какие заголовки уходят на сервер вместе с файлом и попытался...

98
Как получить объект из JSON

Как получить объект из JSON

Сейчас я делаю следующим образом:

126