我听说有人使用 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?
我听说有人使用 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?
我只是将 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 应该查找哪个帖子并不模棱两可。当然,您可能应该首先为您的帖子提供独特的标题,但是将其放在适当的位置会强制执行规则并防止您的应用程序搞砸。
您可以使用 Eric Barnes 的 CI Slug Library:
对于我的 ES 朋友,使用这个从 Text Helper 中删除重音字符:
$string = 'áéíóú ÁÉÍÓÚ';
$slug = url_title(convert_accented_characters($string), 'dash', true));
echo $slug; //aeiou-AEIOU