راکت

دسته بندی محصولات

34 پاسخ

سلام
من دسته بندی محصولات رو نمایش دادم میخام وقتی روی هر دسته بندی کلیک میشه همون محصولات نمایش بده
تو href برا اساس id محصول باید باشه ؟ یا بر اساس نام محصول ؟

<ul class="list-group">
    @foreach($categories as $category)
        <li  class="list-group-item">
            @if($category->child)
            <a href="https://roocket.ir/{{ $category->id }}" class="pb-2"> {{ $category->name }}
                    @include('layouts.list-categories' , ['categories' => $category->child])
            </a>
            @endif
        </li>
    @endforeach
</ul>

این روت ها رو درست تعریف کردم ؟

Route::get('categories/{category}' , 'frontend\CategoryController@index');
Route::get('categories/{category}' , 'frontend\CategoryController@show')->name('category');

کوئری رو نمیدونم به چه صورت بنویسم من به شکل زیر نوشتم وقتی روی دسته بندی میزنم صفحه 404 نمایش میده


    public function index()
    {
        return view('category::index');
    }

    public function show(Category $category)
    {
        $categories = Category::get();
        return view('Category::frontend.category' , compact('categories'));
    }
}
Paradox
Paradox
@paradox
ثبت پرسش جدید

پاسخ‌ها

34
فرشید مرادی
فرشید مرادی
@eniack

تخصص: noob

سلام ، ابتدا لینک رو به این صورت بنویسید

 <ul class="list-group">
                        @foreach($categories as $category)
                            <li  class="list-group-item">
                                @if($category->child)
                                <a href="https://roocket.ir/{{ route('shop', ['category' => $category->name]) }}" class="pb-2"> {{ $category->name }}
                                        @include('layouts.list-categories' , ['categories' => $category->child])
                                </a>
                                @endif
                            </li>
                        @endforeach
                    </ul>

روت رو به این صورت بنویسید

Route::get('shop/{category}' , 'frontend\CategoryController@show')->name('shop');

و برای دریافت محصولات ابتدا باید داخل مدل ها رابطه رو ایجاد کنید و داخل متد show به این صورت صدا بزنید

public function show($category)
    {
       $product = Category::where("name" , $category)->first();
        $products = $product->products
    }
;
Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@eniack
ممنونم
تو مدل پروداکت اینو قرار دادم

    public function categories()
    {
        return $this->belongsToMany(Category::class);
    }

برای category
نیاز هست برای بخش فرانت و ادمین یک مدل جدا درست کنم؟یا باهم باشه مشکلی ایجاد نمیشه؟
تو مدل category هم این مقدار گذاشتم


    public function products()
    {
        return $this->belongsToMany(Product::class);
    }

هنوزم وقتی روی دسته بندی مورد نظر میزنم صفحه 404 نمایش میده

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

فرشید مرادی
فرشید مرادی
@eniack

تخصص: noob

اگر ارور ۴۰۴ دارید روت به درستی تعریف نشده ، بقیه موارد به نظر درست هستن

Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@eniack
این قسمت رو مثل شما نوشتم

Route::get('shop/{category}' , 'frontend\CategoryController@show')->name('shop');

با shop نتیجه نگرفتم بجاش product قرار دادم باز هم نتیجه نگرفتم همش 404 میاد

                                <a href="https://roocket.ir/{{ route('shop', ['category' => $category->name]) }}" class="pb-2"> {{ $category->name }}

برای این قسمت shop همون اسمی که تو روت گذاشتم تعریف کردم

Paradox
Paradox
@paradox

تخصص: در حال یادگیری

کسی میدونه مشکل کجاست ؟لطفا راهنمایی کنید

فرشید مرادی
فرشید مرادی
@eniack

تخصص: noob

کنترلر رو به درستی صدا میزنید؟!!!!

Route::get('shop/{category}' , 'frontend\CategoryController@show')->name('shop');
Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@eniack
بله کنترلر درست صدا زدم
نمیدونم کجای کارم اشتباس

فرشید مرادی
فرشید مرادی
@eniack

تخصص: noob

بررسی کنید که دقیقا متد show داخل همین کنترلر هست ؟ و روت رو دوباره دستی بنویسید

سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

public function index()
    {
        return view('category::index');
    }

آدرس view تون رو یک نگاه بکن!

Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@juza66

ادرس ویو رو که درست کرده بودم ولی این مشکل رفع نشد

    public function show(Category $category)
    {
       $product = Category::where("name" , $category)->first();
       $product = $product->products;
    }

مگه اینک داخل متد مشکل داشته باشه؟

Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@eniack
بله داخل همین کنترلر هست
چندبار روت رو عوض کردم

سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

نسخه لاراول؟! آیا Route که تعریف میکنید میشناسه؟!

من مشکلی که دارم توی لاراول 8 ، هربار Route که تعریف میکنم باید یکبار php artisan optimize رو بزنم تار روت جدید رو پیدا کنه!
شما هم یکبار اینکار رو انجام بده!

Paradox
Paradox
@paradox

تخصص: در حال یادگیری

نسخه 7 استفاده میکنم
این دستور هم زدم ولی باز همینه
مشکل از کدهام هست

این روت که بارها تغییرش دادم ولی نتیجه ای حاصل نشد

Route::get('shop/{category}' , 'frontend\CategoryController@show')->name('shop');

کنترلر

    public function show(Category $category)
    {
       $product = Category::where("name" , $category)->first();
       $products = $product->products;
    }

ویو

        <ul class="list-group">
              @foreach($categories as $category)
                 <li  class="list-group-item">
                     @if($category->child)
                      <a href="https://roocket.ir/{{ route('shop', ['category' => $category->name]) }}" class="pb-2"> {{ $category->name }} @include('layouts.list-categories' , ['categories' => $category->child])
                      </a>
                       @endif
                   </li>
                 @endforeach
        </ul>

مدل category

    public function child()
    {
        return $this->hasMany(Category::class , 'parent' , 'id');
    }

    public function products()
    {
        return $this->belongsToMany(Product::class);
    }

مدل product


    public function categories()
    {
        return $this->belongsToMany(Category::class);
    }

همینه اینهارو مدام دارم تغییر میدم
تو مدل ها مشکلی وجود داره ؟

سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

یک سوال؟!

آیا متد قراره یک ویو برگردونه؟! اگر آره آدرس veiw رو کجا ریترن کردی؟!

public function show(Category $category)
    {
       $product = Category::where("name" , $category)->first();
       $product = $product->products;
    }

آخه توی تایپیک اول اینو نوشته بودی؟! یک ویو برگشت دادی!

public function show(Category $category)
    {
        $categories = Category::get();
        return view('Category::frontend.category' , compact('categories'));
    }
Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@juza66
بله دقیقا قراره یک ویو بر اساس هر دسته بندی که روش میزنم برگردونه
return هم انجام دادم ولی متاسفانه باز 404 نمایش میده
اول اومدم یک متد جدا هم برای نمایش ویو تعریف کردم
داخل متد شو هم ریترن کردم
زمانی که رو دسته بندی مورد نظر میزنم 404 فقط نمایش میده

سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

روی لینک یک اینسپکت بزن ببین آدرسش چجوریه (اگر میتونی اسکرین شات بده)
دوم قدم به قدم dd بگیر ببین آیا اطلاعاتی سمت این متد show میرسه؟!

فرشید مرادی
فرشید مرادی
@eniack

تخصص: noob

ببینید حتی اگر view هم پاس ندید بهش باید حداقل یک صفحه سفید نمایش بده !!!!
فکر میکنم متوجه شدم مشکل کجاس حدس میزنم باید قبل از shop اسلش قرار بدید

Route::get('/shop/{category}' , 'frontend\CategoryController@show')->name('shop');

اگر بازهم ارور داشتید ، روت رو به این صورت بنویسید

Route::get('/shop/{category}', function ($category) {
   return $category;
});
Paradox
Paradox
@paradox

تخصص: در حال یادگیری

dd گرفتم اصلا انگار متد show نمیخونه

لینک

لینک صفحه

Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@eniack
اینو که قرار دادم

Route::get('/shop/{category}', function ($category) {
   return $category;
})->name('shop');

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

فرشید مرادی
فرشید مرادی
@eniack

تخصص: noob

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

 $product = Category::where("name" , $category)->first();
        $products = $product->products

و $products رو compact کنید داخل روت مد نظر خودتون

صفحه 1 از 2

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

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