我听说有人使用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