1.2021_11_25_223635_create_ menus_table.php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateMenusTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('menus', function (Blueprint $table) {
$table->id();
$table->string('menu_adi');
$table->string('title')->nullable();
$table->text('my_content')->nullable();
$table->string('url');
$table->boolean('type')->default(0)->comment('0 - static, 1 - dynamic');
$table->tinyInteger('parent')->default(0)->comment('0 - parent, else child');
$table->boolean('hide')->default(0)->comment('0 - not hide, 1 - hide');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('menus');
}
}
2.App\Models\Menu.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Menu extends Model
{
use HasFactory;
protected $table = 'menus';
protected $guarded = [];
public function parent()
{
return $this->belongsTo(Menu::class, 'parent', 'id');
}
public function children()
{
return $this->hasMany(Menu::class, 'parent', 'id');
}
public function getParent()
{
return $this->hasOne(Menu::class,'id','parent');
}
}
3.App\Providers\AppServiceProvider.php
<?php
namespace App\Providers;
use App\Models\Menu;
use App\Models\Option;
use App\Models\Qanunvericilik;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
$menus = [];
if (Schema::hasTable('menus'))
{
$menus = Menu::all();
}
return view()->share('data', [
'menus'=>$menus
]);
}
}
4.resources/views/front/ includes/ menu.blade.php
<!-- Navbar Start -->
<div class="site-navigation navbar-fixed">
<div class="container">
<div class="row">
<div class="col-lg-12">
<nav class="navbar navbar-expand-lg navbar-dark p-0">
<button class="navbar-toggler" type="button" data-toggle="collapse"
data-target=".navbar-collapse" aria-controls="navbar-collapse" aria-expanded="false"
aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar-collapse" class="collapse navbar-collapse">
<ul class="nav navbar-nav mr-auto">
@foreach($data['menus'] as $menu)
@if($menu->parent == 0)
@include('front.includes.drop-menu-item', $menu)
@endif
@endforeach
</ul>
</div>
</nav>
</div>
<!--/ Col end -->
</div>
<!--/ Row end -->
<div class="nav-search">
<span id="search"><i class="fas fa-search"></i></span>
</div><!-- Search end -->
<div class="search-block" style="display: none;">
<label for="search-field" class="w-100 mb-0">
<form action="{{ route('front.axtar') }}" method="GET">
@csrf
<input type="text" name="axtar" class="form-control" id="search-field" placeholder="Axtar" required>
</form>
</label>
<span class="search-close">×</span>
</div><!-- Site search end -->
</div>
<!--/ Container end -->
</div>
<!-- Navbar End -->
5.resources/views/front/includes/drop-menu-item.blade.php
<li class="nav-item {{ $menu->children->count() > 0 ? 'dropdown' : '' }}" style="display: {{ $menu->hide == 0 ? 'block' : 'none' }}">
<a href="{{ $menu->url }}" class="nav-link {{ $menu->children->count() > 0 ? 'dropdown-toggle' : '' }}" style="color: #000000" {{ $menu->children->count() > 0 ? 'data-toggle="dropdown"' : '' }}>{{ $menu->menu_adi }} {!! $menu->children->count() > 0 ? '<i class="fa fa-angle-down"></i>' : '' !!}</a>
@if ($menu->children->count() > 0 )
<ul class="dropdown-menu" role="menu">
@foreach($menu->children as $sub_menu)
@if ($sub_menu->children->count() > 0 )
<li class="dropdown-submenu">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> <span class="nav-label">{{ $sub_menu->menu_adi }}</span><span class="caret"></span></a>
<ul class="dropdown-menu">
@foreach($sub_menu->children as $menu)
@include('front.includes.drop-menu-item', $menu)
@endforeach
</ul>
</li>
@else
<li><a href="{{ $sub_menu->url }}">{{ $sub_menu->menu_adi }}</a></li>
@endif
@endforeach
</ul>
@endif
</li>
Delete nested menus
6.
<?php
namespace App\Http\Controllers\back;
use App\Http\Controllers\Controller;
use App\Models\Menu;
use Illuminate\Http\Request;
class settingsController extends Controller
{
public function menuDelete($id)
{
$menu = Menu::findOrFail($id);
$output = '';
$output .= $menu->id.',';
$output .= $this->nestMenus($menu);
$ids = array_filter(explode(',',$output));
Menu::destroy($ids);
toastSuccess('Data uğurla silindi');
return redirect()->back();
}
public function nestMenus($array)
{
$output = '';
if ($array->children->count() > 0)
{
foreach ($array->children as $child)
{
if ($child->children->count() > 0)
{
$array = $child;
$output .= $child->id.',';
$output .= $this->nestMenus($array);
}
else
{
$output .= $child->id.',';
}
}
return $output;
}
else
{
return $output;
}
}
}
Digər dildə:
EN