2010-07-22 42 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