在codeigniter中使用slugs

问题描述 投票:0回答:3

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

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

据我了解,通过维护 slug 字段,可以实现类似的 url

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

这是如何做到的?特别是关于 codeigniter?

php codeigniter slug clean-urls
3个回答
55
投票

我只是将 slugs 存储在数据库表中名为

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 应该查找哪个帖子就不会含糊不清。当然,您可能应该首先为您的帖子指定独特的标题,但是将其放在适当的位置强制规则并防止您的应用程序搞砸。


3
投票

致我的 ES 朋友,请使用此功能从 Text Helper 中删除重音字符:

 $string = 'áéíóú ÁÉÍÓÚ';   
 $slug = url_title(convert_accented_characters($string), 'dash', true); //convert_accented_characters function will deal with the accented characters.
 echo $slug; //aeiou-AEIOU

0
投票

尝试使用这个包:https://github.com/mberecall/ci4-slugify

首先,在控制器上导入这个 slugify 类:

use Mberecall\CodeIgniter\Library\Slugify;

您可以通过以下方式获得蛞蝓:

$post = new Post();
$title = 'André & François won mathematics competion';
$slug = Slugify::table('posts')->make($title); //When you use table name
$slug = Slugify::model(Post::class)->make($title); //When you use model object

在更新记录阶段,这样做:

public function update_post(){
    $id = $request->getVar('post_id');
    $post = new Post();
    $title = 'André & François won mathematics competion';

    $slug = Slugify::model(Post::class)->sid($id)->make($title);

}
© www.soinside.com 2019 - 2024. All rights reserved.