【问题标题】:Using slugs in codeigniter在 codeigniter 中使用 slug
【发布时间】: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?

【问题讨论】:

    标签: php codeigniter slug clean-urls


    【解决方案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 的性能。假设你有一个类似 Stackoverflow 的 URL:/questions/{integer}/{slug},这不是比 /questions/{slug} 更有效率吗,因为对于第一种类型的 URL,你可以简单地使用数据库中的主键用于更快的搜索。对于另一个 URL,您必须进行字符串比较,这肯定会更慢。
        • @EsTeGe:没错。如果性能是一个问题,您将要坚持使用快速索引/键进行查询。但是,如果它不重要,或者您有一些合理的缓存来减轻数据库的负载,您可以使用 slug 代替。
        • 哦,我没有想到codeigniter的内置缓存能力。这是基于 URL 的,因此无需担心查询。
        猜你喜欢
        • 2018-04-30
        • 2015-06-19
        • 1970-01-01
        • 2013-07-31
        • 1970-01-01
        • 2013-02-28
        • 1970-01-01
        • 1970-01-01
        • 2015-01-27
        相关资源
        最近更新 更多