Создание зависимых списков yii2

arsen

Разрушитель (V)
Сообщения
154
Симпатии
47
Баллы
1 642
Итак что есть
таблицы марка авто и модель авто
таблица mark имеет поля id и mark
таблица mod имеет поля id, parent_mark_id(связывает значения) и model
Делаю админку, отдельным модулем. реализовано через CRUD отдельная страница добавления марок, моделей и запчастей
Именно для удобного добавления последнего и хочу связать списки
По средствам CRUD реализована через greedview форма вывода и добавления, редактирования удаления, вместо id подтянуты значения. Марки и модели вывел отдельными селктами, сейчас пытаюсь реализовать чтобы при выборе марки в модель подтягивались только значения по parent_mark_id.
Объясните, пожалуйста доступным языком принцип реализации, примеры вроде нашел, но туплю, не могу разобраться
 

Вложения

  • Снимок.PNG
    Снимок.PNG
    26,8 КБ · Просмотры: 6
Сразу поясню в чем мои затупы в первую очередь
пример с городами и регионами

PHP:
<?= $form->field($model, 'region_id')->dropDownList(yii\helpers\ArrayHelper::map(common\models\Region::find()->all(),'id','name'), [
            'prompt'=>'Выбрать',
            'onchange'=>'
                $.post("/admin/client/lists?id='.'"+$(this).val(), function(data){
                    $("select#client-city_id").html(data);
                });',
    ]) ?>
   
<?= $form->field($model, 'city_id')->dropDownList($arr, [
        'prompt'=>'Выбрать...',
]) ?>
я не могу понять что происходит тут
PHP:
 'onchange'=>'

                $.post("/admin/client/lists?id='.'"+$(this).val(), function(data){

                    $("select#client-city_id").html(data);

                });',
в частности что такое lists?id
Как бы понятно, что это для вывода данных в виде List

Но есть нюанс, если при обновлении я смогу сделать вид admin/autoparts/update?id
то при создании это не работает /admin/autoparts/create
и куда писать логику в контролер
В примере
В actionLists:
Код:
public function actionLists($id){
        
    $data = '<option>Выбрать...</option>';
    
    if($items = City::find()->where(['region_id'=>$id])->all()){
        foreach($items as $item){
            $data .= "<option value='".$item->id."'>".$item->name."</option>";
        }
    }
    return $data;
}
Очевидно, что у меня не этой функции, я хочу использовать связанные списки для создания и редактирования данных в этом случае, а не для выборки.
если в actionUpdate то не ясно как создавать новое, и не понятно
 
Последнее редактирование:
В общем спустя пару дней вернулся к вопросу и разобрался в чем был мой затуп. actionLists просто подгружает переменную дата, в вид. либо Выбрать... либо массив. при этом на синтаксис /admin/client/lists?id=, а именно на lists?id= который меня парил обращать внимания не соит - урл не меняется просто отрабатывает actionLists. Основной косяк был в том, что я пытался обратиться через $model не к текущей модели, а к той, которая мне нужна не указав ее предварительно. Короче разобрался, куски кода прикладывать смысла нет, тк коментить многое придется, у меня свои таблицы там и модели. Если у кого будет аналогичный затуп - пишите сюда, будем думать.
 
Назад
Верх