راکت

چیدمان صحیح اسلاگ در لاراول

3 پاسخ

سلام و درود؛
من برای اسلاگ هام از cviebrock/eloquent-sluggable استفاده میکنم اما همیشه از آدرس های ساده مثل: www.domain.com/blog/post-title استفاده میکردم.
حالا میخوام این رو تغیر بدم که ساختارش هم برای سئو بهینه تر باشه به طوری که: www.domain.com/blog/category/post-title .
درواقع دسته بندی که در آدرس قرار میگیره، دسته بندی اصلی هست (parent_id=0) .
ممنون میشم اگر کسی در این زمینه تجربه داشته بهم بگه و کمکم کنه.

این هم بگم که از پکیج eloquent-sluggable به صورتRoute Model Binding استفاده میکنم.

ثبت پرسش جدید

پاسخ‌ها

3
محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

خوب الان سوالتون دقیقا چیه...؟
این کار شدنی هست. فقط اگر سئوی صفحات قبلی براتون مهمه لازمه که آدرس های قبلی رو به جدید Redirect از نوع 301 بکنید.
ولی به نظرم ساختار فعلیتون از نظر سئویی بهتر و بهینه‌تر هست. چون هر چقدر آدرس URL به دامنه اصلی نزدیک‌تر باشه به نوعی وزن بالاتری پیدامی‌کنه و اضافه کردن category به آدرس URL یک پست از وبلاگ چندان کار منطقی و حداقل مرسومی نیست.

پکیجی هم که معرفی کردید کارش ساختن slug و یکسری helper function هاست. ساختار URL رو خودتن راجع بهش باید تصمیم‌گیری کنید و در router تون بسازید.

امیرعلی
امیرعلی
@amiraliny

تخصص: توسعه دهنده وب

در واقع سوال من اینه که چطور میتونم category را به url ارسال کنم.
رابطه بین category و blog به صورت many to many هست.
خودم این مراحل رو رفتم اما خوب قطعا اشتباهه؛
اول روتی که تعریف کردم رو تغیر میدم به صورت:

Route::get('mag/{category}/{blog}' , [\App\Http\Controllers\HomeBlogController::class , 'single'])->name('blog_single')  ;

بعد میرم سراغ کنترلر و هم blogرو پاس میدم و هم category رو به صورت:

    public function single(blog $blog)
    {
        $category = Category::all()->where('parent' , '0')->where('id' , $blog->id);
        return view('home.blogs-single' , compact('blog' , 'category'));
    }
//در این قسمت قاعدتا با توجه به رابطه ای که در مدل ها تعریف شده باید به صورت `$blog->categories()->name` هم دسترسی داشت

و بعد آدرس دهی مستقیم را برا المنت هام تعریف میکنم به صورت:

                                    <a class="btn btn-outline-success float-end" href="https://roocket.ir/{{route('blog_single',$category->name ,$blogs->slug)}}">مطالعه</a>

این هم از مدل یوزر:

  use Sluggable ,SluggableScopeHelpers;

    public function sluggable(): array
    {
        return [
            'slug' => [
                'source' => 'title'
            ]
        ];
    }

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

ممنون میشم روشم رو ببینید و اشکلاتم رو بگین.

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

مهدی اردشیر
مهدی اردشیر
@mehdi0121

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

سلام فکر میکنم single رو بد نوشتی چرا اومدی ایدی پست (بلاگ ) رو توی کتگوری where میزنی ؟

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

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