2010-07-22 60 views
10

我聽說有人使用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?

回答

42

我只存儲蛞蝓在我的數據庫表,在一個名爲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列,確保每個崗位都有一個唯一的金屬塊,所以它不是含糊其職務笨笑呃找找。當然,你可能應該在第一時間給你的帖子設置獨一無二的標題,但是這樣做會使執行這條規則,並阻止你的應用程序搞砸。

+2

這是完全相同的方式我會這樣做,但我有點擔心這些類型的URL的性能。假設你有一個類似於Stackoverflow的URL:/ questions/{integer}/{slug},這不是比/ questions/{slug}更高效,因爲使用第一種類型的URL,你可以簡單地使用數據庫中的主鍵,以加快搜索速度。在另一個URL中,你將不得不做一個字符串比較,這肯定比較慢。 – EsTeGe 2012-06-13 16:22:26

+0

@EsTeGe:是的。如果性能是一個問題,您需要堅持使用快速索引/鍵進行查詢。但是,如果它不重要,或者您有一些合理的緩存來減輕數據庫的負載,則可以使用slug代替。 – BoltClock 2012-06-13 16:24:19

+0

哦,我沒有想到codeigniter的內置緩存功能。這是基於URL的,所以這是少一個需要擔心的查詢。 – EsTeGe 2012-06-13 16:32:37

0

要我ES的朋友,刪除使用該重音符號,從文本助手:

$string = 'áéíóú ÁÉÍÓÚ';  
    $slug = url_title(convert_accented_characters($string), 'dash', true)); 
    echo $slug; //aeiou-AEIOU