دسته بندی و زیر دسته بندی

- 4 هفته پیش
توسط مصطفی آپدیت شد
مهدی ساسانی ( 153 تجربه )
9 ماه پیش

خیلی درگیر این کار بودم و بلأخره خودم تونستم با یه کم درگیری انجامش بدم.
با این کار می‌تونید زیر دسته بندی‌ها و دسته بندی‌ها رو به خوبی مرتب کنید.

ساخت مدل و جدول مربوط به دسته بندی

php artisan make:model Category -m

وارد کردن ستون parent_id در جدول categories

وارد فایل 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

خب، حالا که وارد فایل 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 دسته بندی‌های والد یکسان بود، زیر اونا نشون داده بشن.
امیدوارم استفاده کنید. موفق باشید

محمد سوری ( 70 تجربه )
4 ماه پیش

با سلام
سئوالی داشتم در مورد دسته بندی ها :
من استایل های متفاوتی رو برای حالت های مختلف دسته بندی و زیر دسته ها ایجاد کردم که اگر دسته بندی اصلی بود یک استاب رو در صفحه ایندکس دسته بندی نمایش بده، اگر زیر دسته ای بود که زیر مجموعه داشت به یک شکل و اگر زیر دسته بود به شکل دیگری،اما برای اینکه نام دسته والد رو روبروی دسته بندی ها نمایش بدم مشکل دارم و تنها می تونم ای دی دسته والد رو نمایش بدم.چطوری می تونم نام دسته والد رو نمایش بدم در کنار زیر دسته ها ؟
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```
Arshavir ( 20621 تجربه )
4 ماه پیش

@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 
مصطفی ( 6050 تجربه )
2 ماه پیش

@aqamati
@Arshavir

برای آپدیت کتگوری مثلا یه پست تو مدیریت باید چیکار کرد؟

Arshavir ( 20621 تجربه )
2 ماه پیش

@mostafanori
واضح تر توضیج بدید
میخواهید فقط دسته رو آپ کنید یا پست رو

مصطفی ( 6050 تجربه )
2 ماه پیش

@Arshavir
کلا با این روشی که دوستمون گفت ، ما الان باید یه بخش هم تو مدیریت داشته باشیم برای مدیریت دسته ها که بتونیم حذف یا اضافه کنیم و یا والد یا فرزند دسته ای رو عوض کنیم

از اونورم همین نمودار درختی دسته ها رو باید در هنگام ایجاد و ویرایش پست داشته باشیم که هم ایجاد بشه و یا بروزرسانی بشه

MegaIran ( 205 تجربه )
4 هفته پیش

سلام دوستان
من میخواهم بدونم چطوری باید دسته بندی ها و زیر دسته بندی ها رو ذخیره (store) و ویرایش(update) کنم ؟ نمیدونم چطوری باید این دوتا متد در کتگوری کنترل بنویسمش!!! ممنون میشم کمکم کنید و کدتونو به اشتراک بزارید...
@mostafanori
@Arshavir
@aqamati

مصطفی ( 6050 تجربه )
4 هفته پیش

@Megairan
سلام
من از این لینک استفاده کردم . تو این آموزش ایجاد دسته بندی تا ۳ فرزند رو (اگر اشتباه نکنم ) گفته . مشکلی داشتی بپرس بهت بگم .
آموزش دسته بندی داینامیک در لاراول

برای ارسال پاسخ باید وارد سایت شوید