خیلی درگیر این کار بودم و بلأخره خودم تونستم با یه کم درگیری انجامش بدم.
با این کار میتونید زیر دسته بندیها و دسته بندیها رو به خوبی مرتب کنید.
php artisan make:model Category -m
وارد فایل create_categories_table بشین و کد زیر رو قرار بدید اطلاعات مورد نیاز خودتون هم قرار بدید.
$table->unsignedInteger('parent_id')->nullable()->default(null);
قطعه کد زیر رو داخل مدل Category قرار بدید؛ این کد مشخص میکنه که هر دسته بندی ممکنه به یک دسته بندی والد (parent) وابستگی داشته باشه.
public function parent() {
return $this->belongsTo(Category::class);
}
داخل کنترلر CategoryController و تابع index دستورات زیر رو قرار بدید.
public function index()
{
// درخواست تمام دسته بندیهای والد از دیتابیس
$categories = Category::with('parent')->whereNull('parent_id')->get();
// درخواست تمام زیر دسته بندیها از دیتابیس
$subcategories = Category::with('parent')->whereNotNull('parent_id')->get();
// هدایت هر دو متغیر به یک ویوو
return view('category', compact('categories', 'subcategories'));
}
خب، حالا که وارد فایل blade شدید، با دستورات زیر خیلی ساده میتونید هر کدوم از دسته بندیها رو مشخص کنید.
@foreach($categories as $category)
<h2>{{ $category->title }}</h2>
@foreach($subcategories as $subcategory)
if($subcategory->parent_id == $category->id)
<h3>{{ $subcategory->title }}</h3>
@endif
@endforeach
@endforeach
با کد بالا، ما مشخص کردیم تمام زیر دسته بندیهایی که فیلد parent_id اونا با فیلد id دسته بندیهای والد یکسان بود، زیر اونا نشون داده بشن.
امیدوارم استفاده کنید. موفق باشید
با سلام
سئوالی داشتم در مورد دسته بندی ها :
من استایل های متفاوتی رو برای حالت های مختلف دسته بندی و زیر دسته ها ایجاد کردم که اگر دسته بندی اصلی بود یک استاب رو در صفحه ایندکس دسته بندی نمایش بده، اگر زیر دسته ای بود که زیر مجموعه داشت به یک شکل و اگر زیر دسته بود به شکل دیگری،اما برای اینکه نام دسته والد رو روبروی دسته بندی ها نمایش بدم مشکل دارم و تنها می تونم ای دی دسته والد رو نمایش بدم.چطوری می تونم نام دسته والد رو نمایش بدم در کنار زیر دسته ها ؟
http://uupload.ir/files/jze_2019-02-14.png
نمونه کد:
<td>{{$category->title}}</td>
@if($category->parent_id ==0)
<td style="text-align: center;"><span class="m-badge m-badge--primary m-badge--wide" >دسته بندی اصلی</span>
@elseif(count($category->childrenRecursive) > 0)
<td style="text-align: center;">
<span class="m-badge m-badge--success m-badge--wide" >زیر دسته اصلی{{$category->parent_id}}</span>
@else
<td style="text-align: center;"><span class="m-badge m-badge--danger m-badge--wide" >زیر دسته( {{$category->parent_id}})</span>
@endif```
@aqamati
به صورت بهینه میشه چیزی به صورت زیر
مدل
namespace App;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
protected $fillable = ['name'];
public function parent()
{
return $this->belongsTo(Category::class, 'parent_id');
}
public function children()
{
return $this->hasMany(Category::class, 'parent_id');
}
}
کنترلر
public function index()
{
$categories = Category::with('children')->whereNull('parent_id')->get();
return view('categories.index', compact('categories'));
}
view
@each('partials._category', $categories, 'category', 'partials._empty-categories')
sub-view
<li>{{ $category->name }}</li>
@if ($category->children->count() > 0)
<ul>
@foreach($category->children as $child)
@include('partials._category', ['category' => $child])
@endforeach
</ul>
@endif
@Arshavir
کلا با این روشی که دوستمون گفت ، ما الان باید یه بخش هم تو مدیریت داشته باشیم برای مدیریت دسته ها که بتونیم حذف یا اضافه کنیم و یا والد یا فرزند دسته ای رو عوض کنیم
از اونورم همین نمودار درختی دسته ها رو باید در هنگام ایجاد و ویرایش پست داشته باشیم که هم ایجاد بشه و یا بروزرسانی بشه
سلام دوستان
من میخواهم بدونم چطوری باید دسته بندی ها و زیر دسته بندی ها رو ذخیره (store) و ویرایش(update) کنم ؟ نمیدونم چطوری باید این دوتا متد در کتگوری کنترل بنویسمش!!! ممنون میشم کمکم کنید و کدتونو به اشتراک بزارید...
@mostafanori
@Arshavir
@aqamati
@Megairan
سلام
من از این لینک استفاده کردم . تو این آموزش ایجاد دسته بندی تا ۳ فرزند رو (اگر اشتباه نکنم ) گفته . مشکلی داشتی بپرس بهت بگم .
آموزش دسته بندی داینامیک در لاراول
سلام یه سوال داشتم در مورد دسته بندی، فرض میکنیم کاملا دسته بندیمونو ایجاد کردیم و بعنوان مثال یه دسته ایی بصورت، (موبایل، --اندروید، ---سامسونگ) داریم که دقیقا سه سطح هستن، ولی وقتی میخام یه محصولی اضافه کنم اونجایی که لیست دسته بندیامو نشون میدم دقیقا باید بگم که این محصول برای دسته ی سامسونگه، یا برای همه ی دسته های بالاترشم یه محصولیو میتونم تعریف کنم، این قسمتو اگه ینفر برام باز کنه ممنون میشم، چون من تا حالا تو یه وبسایت مدیریت محتوا انجام ندادم..
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟