В веб разработке иногда попадаются задачи, в которых необходимо создавать зависимые выпадающие списки. Есть два списка, первый, например выбор свойства товара, второй список это список значений этого свойства. Например, у нас есть двух уровневый список категорий и подкатегорий. При выборе категории в первом списке, необходимо подгрузить подкатегории выбранной категории во втором списке. Имя нашей таблицы categoriesи поля id, name, parent_id. Если категория main, то parent_idона будет равна нулю, а для подкатегории-parent_idидентификатору родительской категории. Код (Text): id name parent_id ------------------------ 1 Book 0 2 Text Book 1 3 Novel 1 --- Добавлено --- Определение Маршрута Добавьте 2 маршрута в файл маршрута. Один для показа формы с выпадающим списком, а другой для JSON API. Код (Text): Route::get('/dropdown','DropdownController@index'); Route::get('/dropdown-data','DropdownController@data'); --- Добавлено --- Контроллер для формы и данных для выпадающего списка Сделайте контроллер для рендеринга формы с выпадающими списками и методом API для ajax-запроса, который будет запрашивать данные для второго списка. Код (Text): php artisan make:controller DropdownController --- Добавлено --- Теперь код в DropdownController для создания зависимого выпадающего списка. Код (Text): <?php namespace App\Http\Controllers; use App\Http\Requests; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\Category; class DropdownController extends Controller { public function index() { $categories = Category::where('parent_id',0)->get(); return view('dropdown',compact('categories')); } public function data(Request $request){ if($request->has('cat_id')){ $parentId = $request->get('cat_id'); $data = Category::where('parent_id',$parentId)->get(); return ['success'=>true,'data'=>$data]; } } } --- Добавлено --- Форма Создайте dropdown.blade.phpфайл в папке resource/views. Если вы не включили jQuery в свой проект, то сначала включите jQuery. Код (Text): @extends('app') @section('content') <div class="container"> <div class="row"> <div class="col-md-3"> <h3>Dependent Dropdown</h3> <hr> <div class="form-group"> <label>Category</label> <select class="form-control input-sm" name="category_id"> <option value="">--select--</option> @foreach ($categories as $row) <option value="{{$row->id}}">{{$row->name}}</option> @endforeach </select> </div> <div class="form-group" style="position:relative"> <label>Sub-Category</label> <select class="form-control input-sm" name="subcategory_id"></select> <img id="loader" src="{{url('/images/ajax-loader.gif')}}" alt="loader"> </div> </div> </div> </div> <style> #loader { position: absolute; right: 18px; top: 30px; width: 20px; } </style> <script> $(function () { var loader = $('#loader'), category = $('select[name="category_id"]'), subcategory = $('select[name="subcategory_id"]'); loader.hide(); subcategory.attr('disabled','disabled') subcategory.change(function(){ var id = $(this).val(); if(!id){ subcategory.attr('disabled','disabled') } }) category.change(function() { var id= $(this).val(); if(id){ loader.show(); subcategory.attr('disabled','disabled') $.get('{{url('/dropdown-data?cat_id=')}}'+id) .success(function(data){ var s='<option value="">---select--</option>'; data.forEach(function(row){ s +='<option value="'+row.id+'">'+row.name+'</option>' }) subcategory.removeAttr('disabled') subcategory.html(s); loader.hide(); }) } }) }) </script> @endsection --- Добавлено --- PHP: public function create() { $category = Category::whereNull('category_id') ->with('childrenCategories') ->get(); // return view('categories', compact('categories')); return view('category/create'); } Сделал в контроллере, но передается переменная почему-то
Мало того, что он фигчит по два мусорных сообщения в минуту, он ещё и на пару форумов одновременно это делает. Сомневаюсь что в таком режиме можно ещё чему-то учиться, что-то пробовать осмысленно.