PDA

View Full Version : لاراول و URLها



aliireza
دوشنبه 11 فروردین 1393, 18:28 عصر
سلام.
من یک پروژه دارم که مثل وبلاگ، تو صفحه اول همه‌ی مطالب لیست شدن و کاربر با کلیک روی عنوان هر مطلب وارد صفحه همون مطلب (single) میشه.
میخوام بدونم آدرس هر مطلب رو چطور باید هندل کنم.
روش اول:
site.com/id=123&title=post
اگر به این شکل باشه راحت‌تر هست و مشکلی نیست، ولی آدرس قشنگ نیست و از لحاظ سئو هم مشکل داره.
روش دوم و بهتر اینه:
site.com/post_title
و مشکل همینجا بوجود میاد که نمیدونم چطور این آدرس رو بگیرم و مطلب مربوط به این آدرس رو نشون بدم.
یعنی در روش اول من آی‌دی رو دارم، ولی در روش دوم فقط با عنوان پست طرف هستم.
یکم اگر راهنمایی کنید ممنون میشم
:)

amirkheirabadi.com
دوشنبه 11 فروردین 1393, 21:04 عصر
سلام دوست عزیز ....
برای مشکلت ساده ترین و راحت ترین کار استفاده از یک id ... که مثلا می گی

site.com/id=123
درست ولی خب شما گفتید برای سئو می خواید site.com/post_title اینطوری بشه ...
برای اینکار می تونید موقع ایجاد مطلب و ذخیره تو بانک همون موقع title رو تبدیل کنید به title_alias یعنی فاصله های بین کلمات رو به underline تبدیل کنید مثلا بعد هم به راحتی بک کوئری بگیرید ...
توی laravel مثلا :


$post = Post::where('title_alias','=',Input::get('title'))->get();

یک همچین چیزی ....
امیدوارم تونسته باشم کمکی بکنم ....

MMSHFE
چهارشنبه 13 فروردین 1393, 16:25 عصر
البته ناگفته پیداست که باید فیلد title_alias یا هر اسمی که میگذارین رو هم Unique کنید تا دو مطلب با عنوان یکسان ثبت نشه.

afee1990
چهارشنبه 10 اردیبهشت 1393, 11:48 صبح
می‌تونی از پکیج sluggable (https://github.com/cviebrock/eloquent-sluggable) استفاده کنی تا در مواقع ذخیره مطلب جدید به صورت اتوماتیک slug اون هم ذخیره بشه. البته خود لاراول هم یه کتابخونه داره واسه این کار که از طریق
Str::slug($string) قابل دسترسیه ولی اون پکیجی که بالا معرفی کردم خیلی بیشتر به دردت می‌خوره ولی مشکل هر دوی اینا اینه که زبون فارسیو ساپورت نمی‌کنن واسه همین من اومدم یه تغییراتی توش دادم تا ساپورت کنه که از اینجا (https://github.com/morilog/eluquent-sluggable-persian)می‌تونی دانلود و نصبش کنی

tux-world
جمعه 12 اردیبهشت 1393, 22:03 عصر
اون لینکی که معرفی کردید اشتباست. لطفا اصلاحش کنید. ممنون

rahahost
پنج شنبه 15 آبان 1393, 14:08 عصر
سلام .

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

اگر فرض کنید کاربر آدرسی رو بصورت دستی ، به این شکل وارد کرده ( فرض کنید روتر ما درسته و news کنترلر رو مشخص میکنه و عدد بعدش آی دی خبر ) :

www.example.com/news/1 (http://www.example.com/news/1)

حالا چطور میشه این ادرس رو به آدرس زیر تغییر داد ( همون slug درون تیبل خبر ها ) ؟ :
www.example.com/news/my-sample-title (http://www.example.com/news/my-sample-title)

این قابلیت درون وردپرس وجود داره که کاربر انتخاب میکنه آدرس دهی به چه شکلی باشه ، میخوام به همین شکل پیاده سازی کنم .

ممنون میشم راهنماییم کنید .

ni.alpr
شنبه 24 آبان 1393, 19:28 عصر
شما برای این کار باید حتما یه ستون slug داشته باشید که unique باشه . همونطوری که id پست رو می گیرید. با slug هم می تونید این کار رو بکنید.

شما میتونید هر دو رو درون route داشته باشید.




route->get('news/{id}','NewsController@showById')->where('id', '[0-9]+');
route->get('news/{slug}','NewsController@showBySlug')->where('slug', '[A-Za-z]+');


یا می تونید هر دو رو با هم داشته باشید .من خودم این رو ترجیح می دم . که slug هم دلخواه باشه.

route->get('news/{id}/{slug?}','NewsController@show');

یا می تونید یه فایل config برای cms خودتون در نظر بگیرید و درون ادمین تنظیماتی رو براش در نظر بگیرید . که این بیشترش برمیگرده به قدرت خلاقیت خودتون.

بیشتر زحمت بر میگرده به جاهایی که می خواید موضوع هارو به خبر اصلی لینک کنید . که باید متدی برای تولید لینک در مدلتون نظر بگیرید و تغییر تنظیمات اونجا هم اثر بزاره.