как отобразить все пункты меню и подменю в другом выпадающем списке?
Я не знаю, что происходит ! этот код не работает у меня должным образом. я не понимаю ошибки. он показывает меню правильно, но не показывает никаких подменю под определенным меню. Вот мой код:
##Table: menus##
id name parent_id
1 Dhaka 0
2 Chitagong 0
3 Chittagong University 2
4 Dhaka University 1
5 Barisal 0
6 Chittagong University 5
##route:##
Route::get('/', 'MenuController@index');
Route::get('/sub','MenuController@subMenu');
##Model:##
<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class Menu extends Model
{
protected $fillable = [
'id','name','parent_id'
];
}
##Controller :##
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateSupportFacadesInput;
use AppHttpRequests;
use AppMenu;
class MenuController extends Controller
{
public function index()
{
$menuItem = Menu::where('parent_id', '=',0)->get();
return view('index', compact('menuItem'));
}
public function subMenu()
{
$parent = Input::get('parentID');
$sub_menu= Menu::where('parent_id','=',$parent)
->select('id','name')
->get();
return response()->json($sub_menu);
}
}
##View:##
<!--/.start add menu section-->
<div class="row">
<div class="col-xs-12">
<div class="panel panel-default">
<div class="panel-heading">
<strong>Menu </strong>
</div>
<div class="panel-body">
<div class="form-horizontal">
<div class="row">
<div class="col-xs-8">
{{ Form::open(['class' => 'form-horizontal', 'role' => 'form']) }}
<div class="form-group">
<label align="right" for="name" class="control-label col-xs-2">Menu :</label>
<select class="col-md-5 input-sm" name="menu" id="menu">
@foreach ($menuItem as $menu)
<option value="{{ $menu->id }}" placeholder="choose menu">{{ $menu->name }}</option>
@endforeach
</select>
</div>
<div class="form-group">
<label align="right" for="child_id" class="control-label col-xs-2">Sub Menu :</label>
<select class="col-md-5 input-sm" name="child_id" id="child_id" >
</select>
</div>
</div>
</div>
</div>
</div>
<div class="panel-footer">
<div class="row">
<div class="col-md-8">
<div class="row">
<div class="col-md-offset-2 col-md-6">
{!! Form::submit('Save', ['class' => 'btn btn-primary add-submenu']) !!}
</div>
</div>
</div>
</div>
</div>
</div>
{{ Form::close() }}
</div>
</div>
javascript:
-------------
<script type="text/javascript">
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$(document).ready(function(){
$('#menu').on('change',function(e){
console.log(e);
var parentID= e.target.value;
$.getJSON('/sub?parentID=' + parentID, function(data){
console.log(data);
$('#child_id').empty();
$.each(data,function(index, child){
$('#child_id').append('<option value="'+child.id+'">'+child.name+'</option>');
});
});
});
});
</script>
В чем проблема в этом коде?
3 ответа:
В вашем коде много ошибок. Вы просто копируете и вставляете, забыв изменить эти значения.
Для этого я использую отдельный контроллер и javascript.
на мой взгляд<div class="form-group"> <label align="right" for="name" class="control-label col-xs-2">Course :</label> <select class="col-md-5 input-sm" name="name" id="name"> @foreach ($menuItem as $menu) <option value="{{ $menu->id }}" placeholder="choose menu">{{ $menu->name }}</option> @endforeach </select> </div>
Для получения пунктов подменю я использую Javascript
<script type="text/javascript"> $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); $(document).ready(function(){ $('#name').on('change',function(e){ console.log(e); var parentID= e.target.value; $.getJSON('/your current url/sub?parentID=' + parentID, function(data){ console.log(data); $('#child_id').empty(); $.each(data,function(index, child){ $('#child_id').append('<option value="'+child.id+'">'+child.name+'</option>'); }); }); }); });
В моем
route.php
у меня естьRoute::get('your current url/sub','MyJSController@loadchild');
В моем MyJSController - > loadchild функция имеет
public function loadchild() { $parent = Input::get('parentID'); $sub_menu= DB::table('menus') ->where('parent_id','=',$parent) ->select('id','name') ->get(); return response()->json($sub_menu); }
Выпадающее меню подменю в вашем представлении должно быть таким
<div class="form-group"> <label align="right" for="child_id" class="control-label col-xs-2">Sub Menu :</label> <select class="col-md-5 input-sm" name="child_id" id="child_id" > </select> </div> public function create() { $menuItem = DB::table('menus') ->where('parent_id','=',0) ->get(); return view('menu.createmenu', compact('menuItem')); }
Убедитесь, что вы импортировали
use Illuminate\Support\Facades\Input; use DB;
в вашем контроллере.
Одна дополнительная вещь
не используйте{!! Form::close() !!}
Эти,из-за уязвимостей безопасности. Используйте{{ Form::close() }}