我聽說有人使用slu for生成乾淨的URL。我不知道它是如何工作的。 目前我有通過維護蛞蝓場就可以實現像在codeigniter中使用slu 012
www.site.com/index.php/blog/view/once-upon-a-time
網址,如何做到這一點生成的URL像這樣
www.site.com/index.php/blog/view/7
從我瞭解一個笨網站?尤其是參考codeigniter?
我聽說有人使用slu for生成乾淨的URL。我不知道它是如何工作的。 目前我有通過維護蛞蝓場就可以實現像在codeigniter中使用slu 012
www.site.com/index.php/blog/view/once-upon-a-time
網址,如何做到這一點生成的URL像這樣
www.site.com/index.php/blog/view/7
從我瞭解一個笨網站?尤其是參考codeigniter?
我只存儲蛞蝓在我的數據庫表,在一個名爲slug
列,則找到了一條信息蛞蝓,就像這樣:
public function view($slug)
{
$query = $this->db->get_where('posts', array('slug' => $slug), 1);
// Fetch the post row, display the post view, etc...
}
另外,可以輕鬆地從你的文章標題派生蛞蝓,只需要使用URL幫手url_title()
:
// Use dashes to separate words;
// third param is true to change all letters to lowercase
$slug = url_title($title, 'dash', true);
一點獎金:你可能希望實現一個獨特的鍵約束slug
列,確保每個崗位都有一個唯一的金屬塊,所以它不是含糊其職務笨笑呃找找。當然,你可能應該在第一時間給你的帖子設置獨一無二的標題,但是這樣做會使執行這條規則,並阻止你的應用程序搞砸。
您可以通過埃裏克·巴恩斯使用CI彈頭庫:
要我ES的朋友,刪除使用該重音符號,從文本助手:
$string = 'áéíóú ÁÉÍÓÚ';
$slug = url_title(convert_accented_characters($string), 'dash', true));
echo $slug; //aeiou-AEIOU
這是完全相同的方式我會這樣做,但我有點擔心這些類型的URL的性能。假設你有一個類似於Stackoverflow的URL:/ questions/{integer}/{slug},這不是比/ questions/{slug}更高效,因爲使用第一種類型的URL,你可以簡單地使用數據庫中的主鍵,以加快搜索速度。在另一個URL中,你將不得不做一個字符串比較,這肯定比較慢。 – EsTeGe 2012-06-13 16:22:26
@EsTeGe:是的。如果性能是一個問題,您需要堅持使用快速索引/鍵進行查詢。但是,如果它不重要,或者您有一些合理的緩存來減輕數據庫的負載,則可以使用slug代替。 – BoltClock 2012-06-13 16:24:19
哦,我沒有想到codeigniter的內置緩存功能。這是基於URL的,所以這是少一個需要擔心的查詢。 – EsTeGe 2012-06-13 16:32:37