在 codeigniter 中使用 slug
Posted
技术标签:
【中文标题】在 codeigniter 中使用 slug【英文标题】:Using slugs in codeigniter 【发布时间】:2011-03-19 08:38:36 【问题描述】:我听说有人使用 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?
【问题讨论】:
【参考方案1】:对于我的 ES 朋友,使用它从 Text Helper 中删除重音字符:
$string = 'áéíóú ÁÉÍÓÚ';
$slug = url_title(convert_accented_characters($string), 'dash', true));
echo $slug; //aeiou-AEIOU
【讨论】:
【参考方案2】:您可以使用 Eric Barnes 的 CI Slug 库:
https://github.com/ericbarnes/CodeIgniter-Slug-Library
【讨论】:
【参考方案3】:我只是将 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 助手的url_title()
:
// Use dashes to separate words;
// third param is true to change all letters to lowercase
$slug = url_title($title, 'dash', true);
一点好处:您可能希望对 slug
列实施唯一键约束,以确保每个帖子都有一个唯一的 slug,因此 CodeIgniter 应该查找哪个帖子不会模棱两可。当然,您可能应该首先为您的帖子赋予独特的标题,但是将其放在适当的位置强制规则并防止您的应用程序搞砸。
【讨论】:
这正是我会做的,但我有点担心这些类型的 URL 的性能。假设你有一个类似 *** 的 URL:/questions/integer/slug,这不是比 /questions/slug 更有效率吗,因为对于第一种类型的 URL,你可以简单地使用数据库中的主键用于更快的搜索。对于另一个 URL,您必须进行字符串比较,这肯定会更慢。 @EsTeGe:没错。如果性能是一个问题,您将要坚持使用快速索引/键进行查询。但是,如果它不重要,或者您有一些合理的缓存来减轻数据库的负载,您可以使用 slug 代替。 哦,我没有想到codeigniter的内置缓存能力。这是基于 URL 的,因此无需担心查询。以上是关于在 codeigniter 中使用 slug的主要内容,如果未能解决你的问题,请参考以下文章