За последние 24 часа нас посетили 18373 программиста и 1619 роботов. Сейчас ищут 1137 программистов ...

Почему не работает вывод для создания подкатегории?

Тема в разделе "Laravel", создана пользователем bossphp, 22 июл 2020.

  1. bossphp

    bossphp Новичок

    С нами с:
    15 июл 2020
    Сообщения:
    24
    Симпатии:
    0
    В контроллере указан немспейс.
    --- Добавлено ---
    Я хотел вернуть детей этих категорий
     
  2. bossphp

    bossphp Новичок

    С нами с:
    15 июл 2020
    Сообщения:
    24
    Симпатии:
    0
    В веб разработке иногда попадаются задачи, в которых необходимо создавать зависимые выпадающие списки. Есть два списка, первый, например выбор свойства товара, второй список это список значений этого свойства. Например, у нас есть двух уровневый список категорий и подкатегорий. При выборе категории в первом списке, необходимо подгрузить подкатегории выбранной категории во втором списке.

    Имя нашей таблицы categoriesи поля id, name, parent_id. Если категория main, то parent_idона будет равна нулю, а для подкатегории-parent_idидентификатору родительской категории.

    Код (Text):
    1. id   name       parent_id
    2. ------------------------
    3. 1    Book       0
    4. 2    Text Book  1
    5. 3    Novel      1
    --- Добавлено ---
    Определение Маршрута
    Добавьте 2 маршрута в файл маршрута. Один для показа формы с выпадающим списком, а другой для JSON API.

    Код (Text):
    1. Route::get('/dropdown','DropdownController@index');
    2. Route::get('/dropdown-data','DropdownController@data');
    --- Добавлено ---
    Контроллер для формы и данных для выпадающего списка
    Сделайте контроллер для рендеринга формы с выпадающими списками и методом API для ajax-запроса, который будет запрашивать данные для второго списка.

    Код (Text):
    1. php artisan make:controller DropdownController
    --- Добавлено ---
    Теперь код в DropdownController для создания зависимого выпадающего списка.
    Код (Text):
    1. <?php namespace App\Http\Controllers;
    2.  
    3. use App\Http\Requests;
    4. use App\Http\Controllers\Controller;
    5. use Illuminate\Http\Request;
    6. use App\Category;
    7.  
    8. class DropdownController extends Controller
    9. {
    10.  
    11.     public function index()
    12.     {
    13.         $categories = Category::where('parent_id',0)->get();
    14.         return view('dropdown',compact('categories'));
    15.     }
    16.  
    17.     public function data(Request $request){
    18.  
    19.         if($request->has('cat_id')){
    20.             $parentId = $request->get('cat_id');
    21.             $data = Category::where('parent_id',$parentId)->get();
    22.             return ['success'=>true,'data'=>$data];
    23.         }
    24.  
    25.     }
    26.  
    27. }
    --- Добавлено ---
    Форма
    Создайте dropdown.blade.phpфайл в папке resource/views. Если вы не включили jQuery в свой проект, то сначала включите jQuery.
    Код (Text):
    1. @extends('app')
    2.  
    3. @section('content')
    4.     <div class="container">
    5.         <div class="row">
    6.             <div class="col-md-3">
    7.                 <h3>Dependent Dropdown</h3>
    8.                 <hr>
    9.                 <div class="form-group">
    10.                     <label>Category</label>
    11.                     <select class="form-control input-sm" name="category_id">
    12.                         <option value="">--select--</option>
    13.                         @foreach ($categories as $row)
    14.                             <option value="{{$row->id}}">{{$row->name}}</option>
    15.                         @endforeach
    16.                     </select>
    17.                 </div>
    18.  
    19.                 <div class="form-group" style="position:relative">
    20.                     <label>Sub-Category</label>
    21.                     <select class="form-control input-sm" name="subcategory_id"></select>
    22.                     <img id="loader" src="{{url('/images/ajax-loader.gif')}}" alt="loader">
    23.                 </div>
    24.  
    25.             </div>
    26.         </div>
    27.     </div>
    28.  
    29.     <style>
    30.         #loader {
    31.             position: absolute;
    32.             right: 18px;
    33.             top: 30px;
    34.             width: 20px;
    35.         }
    36.     </style>
    37.     <script>
    38.         $(function () {
    39.             var loader = $('#loader'),
    40.                 category = $('select[name="category_id"]'),
    41.                 subcategory = $('select[name="subcategory_id"]');
    42.  
    43.             loader.hide();
    44.             subcategory.attr('disabled','disabled')
    45.  
    46.             subcategory.change(function(){
    47.                 var id = $(this).val();
    48.                 if(!id){
    49.                     subcategory.attr('disabled','disabled')
    50.                 }
    51.             })
    52.  
    53.             category.change(function() {
    54.                 var id= $(this).val();
    55.                 if(id){
    56.                     loader.show();
    57.                     subcategory.attr('disabled','disabled')
    58.  
    59.                     $.get('{{url('/dropdown-data?cat_id=')}}'+id)
    60.                         .success(function(data){
    61.                             var s='<option value="">---select--</option>';
    62.                             data.forEach(function(row){
    63.                                 s +='<option value="'+row.id+'">'+row.name+'</option>'
    64.                             })
    65.                             subcategory.removeAttr('disabled')
    66.                             subcategory.html(s);
    67.                             loader.hide();
    68.                         })
    69.                 }
    70.  
    71.             })
    72.         })
    73.     </script>
    74. @endsection
    --- Добавлено ---
    PHP:
    1.  
    2.     public function create()
    3.     {
    4.         $category = Category::whereNull('category_id')
    5.             ->with('childrenCategories')
    6.             ->get();
    7. //        return view('categories', compact('categories'));
    8.         return view('category/create');
    9.  
    10.     }
    Сделал в контроллере, но передается переменная почему-то
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.103
    Симпатии:
    1.243
    Адрес:
    там-сям
    Мало того, что он фигчит по два мусорных сообщения в минуту, он ещё и на пару форумов одновременно это делает. Сомневаюсь что в таком режиме можно ещё чему-то учиться, что-то пробовать осмысленно.
     
  4. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.209
    Симпатии:
    185
    Составь план, раздели задачи на подзадачи
     
    artoodetoo нравится это.