نشان دادن تمام منوها و زیر منوها از دیتابیس در لاراول

در نظر بگیرین یه CMS نوشتین یا به هر دلیل منو و زیر منوهاتونو در دیتابیس ذخیره میکنین تا بهتر مدیریت کنین.

حالا وقتی بخواین اونارو لیست کنین با مشکلاتی مواجه میشین از جمله:

  • استفاده از قطعه کدی که چندین بار Query Builder رو صدا کنه
  • یه Foreach که نمیتونه عمق منو رو تشخیص بده
  • کلی حلقه و شرط اضافی
  • و...

من برای حل این مسئله میخوام یه راه حل بدم

X Menu

https://github.com/Unmd0/X_menu
https://github.com/Unmd0/X_menu


اول برین اینجا و پروژه رو Clone یا Download کنین

برین تو دایرکتوری لاراولتون و فایل xmenu.blade.php رو در « میخواد/دلتون/هرجا/views » قرار بدین


حالا برین هرجا که میخواین منوهاتون رو لیست کنین (حتما باید در یک فایل blade.php. باشین) و فایل xmenu.blade.php رو include کنین

@include('Address.to.xmenu')

حالا که فایل xmenu.blade.php رو در دل قطعه کدهاتون قرار دادین در خط بعدش باید یه function رو صدا کنین

@php 
xmenu ( 0 , 'Category Table' , 'Column of Category name' , 'Column of Category id' );
@endphp

مقادیری که به این فانکشن باید بفرستین رو به ترتیب توضیح میدم:

  • شماره ی اولین پدر (هر منو یه شماره پدر داره که در واقع نشون دهنده ی این است که هر منو زیر منو کدام آیتم هستش)
  • نام جدول (جدولی که منوهای شما داخلش هستن)
  • نام ردیفی که نام منوهاتون در اون جاداره
  • نام ردیفی که نشان دهنده ی شماره منو پدر هستش (اگر هنوز "شماره پدر" شمارو گُنگ کرده پایین تر یه نمونه دیتابیس نشون میدم که از این حال در بیاین )
7- محصولات        |
--------------------------------------------------------------
                          ||   10- محصول (8)        |
8- درج (7)           ||---------------------------------- 
                          ||   11-تنوع (8)              |
______________________________________
                         ||   12-محصول (9)          |
9- ویرایش (7)     ||-----------------------------------
                         ||   13-تنوع (9)               |
______________________________________

عددهایی که در پرانتز ها میبینید شماره پدر هستند و نشون میده هر منو باید زیر کدوم منو باشه (توجه کنید که پدر اصلی و اولین پدر برابر با صفر میباشد)

الان با توجه به این نمونه دیتابیس (نام جدول category میباشد) باید فانکشن رو مثل کد زیر صدا کنیم

@php
xmenu(0,'category','cname','pid');
@endphp

یه مسئله دیگه میمونه

احتمالا شما میخواین زیر منو ها معلوم نباشن و فقط اگر کاربر روی منویی ماوس رو برد زیر منوهاش معلوم بشن و واسه این کار یک استایل css نوشتین

خب میتونین برین تو فایل xmenu.blade.php و قطعه کد زیر رو پیدا کنید و اسم class خودتون رو بزارین

$class=&quotheader__menu__dropdown&quot

و تمام.

تمام تلاشمو کردم ساده و کامل توضیح بدم.

فایل xmenu.blade.php توسط بنده توسعه پیدا کرده و همچنان در حال توسعه و بهتر شدن میباشد.

آیا شما روش بهتری برای معرفی میشناسید؟

لطفا نظرات خودتون رو بهم بگین.