امیرعلی
3 سال پیش توسط امیرعلی مطرح شد
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 استفاده میکنم.


ثبت پرسش جدید
محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش مطرح شد
1

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

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


امیرعلی
تخصص : توسعه دهنده وب
@amiraliny 3 سال پیش آپدیت شد
0

در واقع سوال من اینه که چطور میتونم 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="{{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 3 سال پیش مطرح شد
0

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


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

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