سلام و درود؛
من برای اسلاگ هام از cviebrock/eloquent-sluggable استفاده میکنم اما همیشه از آدرس های ساده مثل: www.domain.com/blog/post-title ا
ستفاده میکردم.
حالا میخوام این رو تغیر بدم که ساختارش هم برای سئو بهینه تر باشه به طوری که: www.domain.com/blog/category/post-title
.
درواقع دسته بندی که در آدرس قرار میگیره، دسته بندی اصلی هست (parent_id=0) .
ممنون میشم اگر کسی در این زمینه تجربه داشته بهم بگه و کمکم کنه.
این هم بگم که از پکیج eloquent-sluggable به صورتRoute Model Binding استفاده میکنم.
خوب الان سوالتون دقیقا چیه...؟
این کار شدنی هست. فقط اگر سئوی صفحات قبلی براتون مهمه لازمه که آدرس های قبلی رو به جدید Redirect از نوع 301 بکنید.
ولی به نظرم ساختار فعلیتون از نظر سئویی بهتر و بهینهتر هست. چون هر چقدر آدرس URL به دامنه اصلی نزدیکتر باشه به نوعی وزن بالاتری پیدامیکنه و اضافه کردن category به آدرس URL یک پست از وبلاگ چندان کار منطقی و حداقل مرسومی نیست.
پکیجی هم که معرفی کردید کارش ساختن slug و یکسری helper function هاست. ساختار URL رو خودتن راجع بهش باید تصمیمگیری کنید و در router تون بسازید.
در واقع سوال من اینه که چطور میتونم 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);
}
ممنون میشم روشم رو ببینید و اشکلاتم رو بگین.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟