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


ثبت پرسش جدید
محمد سوری
@katibe.art.studio 6 سال پیش مطرح شد
0

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

@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 6 سال پیش مطرح شد
0

@aqamati
@Arshavir

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


bardia
تخصص : Golang/Laravel
@mrbardia72 6 سال پیش مطرح شد
0

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


مصطفی
تخصص : برنامه نویس
@mostafanori 6 سال پیش مطرح شد
1

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

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


رضا
تخصص : Laravel Developer
@Megairan 6 سال پیش مطرح شد
0

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


مصطفی
تخصص : برنامه نویس
@mostafanori 6 سال پیش مطرح شد
1

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


Vahid Ashourzadeh
@v.ashourzadeh 5 سال پیش مطرح شد
0

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


moradiyan
@m.moradiyan71 5 سال پیش مطرح شد
-1

دمتون گرم.


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

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