راکت

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

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

ثبت پرسش جدید

پاسخ‌ها

9
محمد سوری
محمد سوری
@katibe.art.studio

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

تخصص: Golang/Laravel

@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 

شاید پاسخ شما همین‌جا باشد

مصطفی
مصطفی
@mostafanori

تخصص: برنامه نویس

@aqamati
@Arshavir

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

bardia
bardia
@mrbardia72

تخصص: Golang/Laravel

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

مصطفی
مصطفی
@mostafanori

تخصص: برنامه نویس

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

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

رضا
رضا
@Megairan

تخصص: Laravel Developer

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

مصطفی
مصطفی
@mostafanori

تخصص: برنامه نویس

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

Vahid Ashourzadeh
Vahid Ashourzadeh
@v.ashourzadeh

سلام یه سوال داشتم در مورد دسته بندی، فرض میکنیم کاملا دسته بندیمونو ایجاد کردیم و بعنوان مثال یه دسته ایی بصورت، (موبایل، --اندروید، ---سامسونگ) داریم که دقیقا سه سطح هستن، ولی وقتی میخام یه محصولی اضافه کنم اونجایی که لیست دسته بندیامو نشون میدم دقیقا باید بگم که این محصول برای دسته ی سامسونگه، یا برای همه ی دسته های بالاترشم یه محصولیو میتونم تعریف کنم، این قسمتو اگه ینفر برام باز کنه ممنون میشم، چون من تا حالا تو یه وبسایت مدیریت محتوا انجام ندادم..

moradiyan
moradiyan
@m.moradiyan71

دمتون گرم.

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام