15

我听说有人使用 slugs 来生成干净的 url。我不知道它是如何工作的。目前我有一个codeigniter网站,它会生成这样的url

www.site.com/index.php/blog/view/7

据我了解,通过维护一个 slug 字段可以实现类似的网址

www.site.com/index.php/blog/view/once-upon-a-time

这是怎么做到的?特别是参考codeigniter?

4

3 回答 3

54

我只是将 slug 存储在我的数据库表中的一个名为 的列中slug,然后找到一个带有 slug 的帖子,如下所示:

public function view($slug)
{
    $query = $this->db->get_where('posts', array('slug' => $slug), 1);

    // Fetch the post row, display the post view, etc...
}

此外,要轻松地从您的帖子标题中获取 slug,只需使用url_title()URL 助手:

// Use dashes to separate words;
// third param is true to change all letters to lowercase
$slug = url_title($title, 'dash', true);

一点好处:您可能希望对slug列实施唯一键约束,以确保每个帖子都有一个唯一的 slug,因此 CodeIgniter 应该查找哪个帖子并不模棱两可。当然,您可能应该首先为您的帖子提供独特的标题,但是将其放在适当的位置会强制执行规则并防止您的应用程序搞砸。

于 2010-07-22T04:33:42.430 回答
3

您可以使用 Eric Barnes 的 CI Slug Library:

https://github.com/ericbarnes/CodeIgniter-Slug-Library

于 2013-12-14T14:05:58.180 回答
2

对于我的 ES 朋友,使用这个从 Text Helper 中删除重音字符:

    $string = 'áéíóú ÁÉÍÓÚ';    
    $slug = url_title(convert_accented_characters($string), 'dash', true));
    echo $slug; //aeiou-AEIOU
于 2017-09-29T20:18:30.403 回答