我听说有人使用 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?
我只是将 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 应该查找哪个帖子就不会含糊不清。当然,您可能应该首先为您的帖子指定独特的标题,但是将其放在适当的位置强制规则并防止您的应用程序搞砸。
致我的 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
尝试使用这个包: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);
}