在 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的主要内容,如果未能解决你的问题,请参考以下文章

在 codeigniter 中使用 HTTPOnly 标志设置 cookie

在视图中使用 foreach 的 Codeigniter

使用codeIgniter在MySQL中查找表是不是存在?

在模型中使用查询的 Codeigniter 分页

在 codeigniter 中使用聚合函数更新列

使用 PHP/CodeIgniter 在 MySQL 中获取最后执行的查询