رفتن به مطلب
انجمن پشتیبانی لاراول ایران

هاست لاراول با پشتیبانی 24 ساعته و امکانات کامل از مدیرهاست

Recommended Posts

سلام خسته نباشید

برای قسمت فرانت میخوام وقتی روی هر دسته بندی کلیک شد صفحه مربوط به اون دسته بندی باز بشه

 نمیدونم چیکار کنم که وقتی روی دسته بندی مثلا طراحی میزنم دقیقا همون دسته بندی نمایش بده

 

Share this post


Link to post
Share on other sites

شما باید مراحل زیر رو انجام بدید

1: ایجاد route مربوط به دسته بندیها که باید شناسه هر دسته بندی رو به route پاس بدید

2: وقتی route اجرا شد باید در کنترلر و داخل متد مثلا show شناسه دسته بندی رو بگیرید و با کوئری به model آیتمهای مربوط به دسته بندی جاری رو دریافت کنید

3: نمایش آیتمهای دریافت شده در صفحه view

Share this post


Link to post
Share on other sites
در 2 ساعت قبل، saber گفته است :

شما باید مراحل زیر رو انجام بدید

1: ایجاد route مربوط به دسته بندیها که باید شناسه هر دسته بندی رو به route پاس بدید

2: وقتی route اجرا شد باید در کنترلر و داخل متد مثلا show شناسه دسته بندی رو بگیرید و با کوئری به model آیتمهای مربوط به دسته بندی جاری رو دریافت کنید

3: نمایش آیتمهای دریافت شده در صفحه view

 

این روت ببنید درست نوشتم؟

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

و قسمت کنترلر

  public function index()
    {
        $Categories = Category::orderBy('id','DESC')->paginate(20);
        return view('front.Categories' , compact('Categories'));
    }

 

مادل

class Category extends Model
{
    protected $fillable = ['name','status','user_id','description','image','slug'];
    protected $attributes = [
        'hit'=> 1,
    ];

 

ویو هم که ساختم

بی زحمت چک کنید کجاشو اشتباه نوشتم

Share this post


Link to post
Share on other sites

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

route هر مجموعه رو با فرض اینکه متد داخل کنترلر show باشه باید اینطوری بنویسید

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

مساله بعدی فرض کنیم جدول مجموعه ها و محصولات رو داریم باید در model روابط بین این دو جدول رو پیاده سازی کنید مثلا اگر رابطه یک به چند باشه

باید داخل مادل Category متد زیر رو بنویسید

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

و در داخل مادل محصولات متد زیر رو قرار بدید

   public function category(){
        return $this->belongsTo(Category::class);
    }

حالا برای دسترسی به محصولات هر مجموعه داخل کنترلر Category متد show رو به شکل زیر میتونید پیاده سازی کنید

    public function show(int $id){
        $category = Category::with('products')->where('id',$id)->first();
        return view('front.category',compact('category'));
    }

و داخل view هم با استفاده از یک حلقه میتونید محصولات داخل مجموعه رو نمایش بدید


    @foreach($category->products as $product)
       اطلاعات هر محصول اینقسمت قابل دسترسی هست
        @endforeach

 

Share this post


Link to post
Share on other sites
در 34 دقیقه قبل، saber گفته است :

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

یه روت هوم کنترلر که ایجاد کرده بودم تو همون کتگوری رو تعریف کردم کنار بقیه

کنترلر جدا ایجاد کردم برای کتگوری ولی اجرا نمیشد و همش ارور میداد تو هوم کنترلر اجرا میکنم بالا میاد صفحه ایندکس ولی صفحه مربوطه باز نمیشه

روت ها

Route::get('/', 'front\HomeController@index')->name('home');
Route::get('/category/{category}', 'front\HomeController@show')->name('category');

 

هوم کنترلر

    public function index()
    {


        $categories = Category::orderBy('id')->get();

        return view('front.main', compact('categories'));
    }

    
    public function show(Category $category)
    {
        $category = Category::with('articles')->where('Category', $category)->first();
        return view('front.category',compact('category'));
    }

 

Share this post


Link to post
Share on other sites

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

  public function show(int $id)
    {
        $category = Category::with('articles')->where('id', $id)->first();
        return view('front.category',compact('category'));
    }

کدهای view لیست مجموعه رو هم بذارید ببینیم چی نوشتید ممکنه لینکها رو درست نذاشته باشید

Share this post


Link to post
Share on other sites
در 2 ساعت قبل، saber گفته است :

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


  public function show(int $id)
    {
        $category = Category::with('articles')->where('id', $id)->first();
        return view('front.category',compact('category'));
    }

کدهای view لیست مجموعه رو هم بذارید ببینیم چی نوشتید ممکنه لینکها رو درست نذاشته باشید

 

این هم ویو اون طریقی که بالاتر گفتید نوشتم ولی ارور میداد پیدا نمیکرد ارتیکلو

 

   <div class="row">

        @foreach($categories as $category)

        <div class="col-md-6 col-lg-4 wow bounceInUp" data-wow-duration="1.4s">
          <div class="box">
              <img src="<?php echo '/storage'.basename($category->image) ?>" alt="" style="max-height:100px;"/>
            <h4 class="title"><a href="{{$category->name}}">{{$category->name}}</a></h4>
            <p class="description">{{$category->slug}}</p>
          </div>
        </div>
    

      @endforeach

      </div>

 

Share this post


Link to post
Share on other sites

یسوال تو php وقتی میخواستیم صفحه مربوط به دسته بندی که لینک میشه رو درست کنیم همون فایلی که مثلا مربوط به مطالب بود میزاشتیم با یک کوئری مینوشتیم

 

برای لاراول به چه صورته ؟باید چه کدی نوشت؟

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

href="{{route('category', $category->slug)}}"

این صفحه باز کرد

http://localhost:8000/category/آموزش فتوشاپ

این ادرس درسته؟

ولی این ارور هست

Argument 1 passed to App\Http\Controllers\front\HomeController::show() must be of the type int, string given 

از متد شو ایراد میگیره

 

Share this post


Link to post
Share on other sites

شما لینک رو براساس هر مقدار که بسازید همون هم به متد show پاس داده میشه و کوئری براساس اون زده میشه مثل همون php خام هست منتها با استفاده از متدهای لاراول

حالا شما اینجا از slug استفاده کردید باید متد show رو هم با همون درست کنید که به شکل زیر میشه


  public function show(string $slug)
    {
        $category = Category::with('articles')->where('slug', $slug)->first();
        return view('front.category',compact('category'));
    }

 

Share this post


Link to post
Share on other sites

 

خیلی ممنون

این صفحه نمایش دسته بندی article رو نمیشناسه ویو مشکل داره یا باید تو روت ها یا کنترلر چیزی اضافه کنم ؟

      @foreach ($articles as $article)
     
        <div class="col-sm-3" >
          <img src="<?php echo '/storage'.basename($article->image) ?>" alt=""/>
        <h3><a href="{{route('article', $article->slug)}}">{{$article->name}} </a></h3>
          <p><?php echo mb_substr(strip_tags($article->description),0,100,'UTF8').'...';  ?></p>
        <div>
          نویسنده : {{$article->user->name}} |
          <i class="fa fa-eye"> {{$article->hit}} </i>
              
        </div>
        </div>
      
      @endforeach

 

Share this post


Link to post
Share on other sites

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

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'articles.category_id' in 'where clause' (SQL: select * from `articles` where `articles`.`category_id` in (6)) 

 

 

وقتی اینطوری مینویسم

مادل کتگوری

 

namespace App\frontmodels;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $fillable = ['name', 'slug','image'];

    public function articles()
    {
        return $this->belongsToMany(Article::class);
    }
    
   
}

 

مادل ارتیکل

namespace App\frontmodels;

use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    protected $fillable = ['name', 'slug','user_id','description','image'];
    protected $attributes = [
        'hit'=> 1,
    ];

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

این ارور میده

Undefined variable: articles (View: C:\xampp\htdocs\laravel\resources\views\front\category.blade.php)

 

 

خیلی اذیتتون کردم من عذر میخوام واقعا

 

Share this post


Link to post
Share on other sites

از متن خطای sql مشکل شما کاملا مشخص هست. ببینید برای پیاده سازی رابطه یک به چند بین جدول مجموعه ها و مطالب شما باید در دیتابیس داخل جدول مطالب

یک ستون به اسم category_id داشته باشید تا هر مطلبی رو به یک مجموعه اختصاص بدید. الان شما چطوری مطالب رو به مجموعه اختصاص داده بودید؟

آموزشهای استاد طالبی رو مجدد ببینید و قسمت پیاده سازی روابط و مطالب و مجموعه ها رو به دقت ببینید

Share this post


Link to post
Share on other sites

وارد این گفتگو شوید

میتوانید پیام خود را ارسال کنید و بعد ثبت نام نمایید. در صورتی که حساب کاربری دارید, هم اکنون وارد شوید و در این گفتگو شرکت کنید.

مهمان
پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  Only 75 emoji are allowed.

×   لینک شما به صورت اتوماتیک جایگذاری شد.   نمایش به عنوان یک لینک به جای

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • جدید...