sawastacks/ ci4-slugify
Codeigniter的简单Slugify库
Requires
- php: ^7.2 || ^8.0
README
内容
Codeigniter 4的简单Slugify库
这个库提供了一种生成唯一slug的方法。
背景:什么是slug?
slug是字符串的简化版本,通常是URL友好的。将字符串“slugging”通常涉及将其转换为单一种类,并删除任何非URL友好的字符(空格、带重音的字母、和号等)。然后可以将生成的字符串用作特定资源的标识符。
例如,如果你有一个带帖子的博客,你可以通过ID引用每个帖子
http://yourdomain.com/post/1
http://yourdomain.com/post/2
...但这并不特别友好(特别是对于SEO)。你可能更愿意在URL中使用帖子的标题,但如果你帖子的标题是“André & François took 55% of the whole space in REAC Company”,这也可能是一个问题,因为这个URL看起来也很丑
解决方案是从标题创建一个slug并使用它。你可能想使用Codeigniter内置的\url_title('This is the title','-', true)
辅助函数将标题/字符串转换为slug,如下所示
http://yourdomain.com/post/andre-francois-took-55-of-the-whole-space-in-reac-company
这样的URL会让用户更高兴(它可读,更容易输入等)。
更多信息,你可能想阅读维基百科上的这个描述。
slugs通常也是唯一的。所以如果你用相同的标题写另一篇帖子,你将需要以某种方式区分它们,通常是在slug的末尾添加一个递增计数器
http://yourdomain.com/post/andre-francois-took-55-of-the-whole-space-in-reac-company
http://yourdomain.com/post/andre-francois-took-55-of-the-whole-space-in-reac-company-1
http://yourdomain.com/post/andre-francois-took-55-of-the-whole-space-in-reac-company-2
这保持了URL的唯一性。
安装
此软件包可以通过composer require
安装。在安装之前,请确保你的系统正在使用PHP >= 7.2。只需在你的cmd或终端中运行以下命令即可
通过Composer安装软件包
composer require sawastacks/ci4-slugify
用法
在您的Codeigniter项目中安装了此软件包后,您现在有许多方法可以生成博客帖子或产品的唯一slug。只需遵循以下指南,这些指南将教您如何在控制器中使用SlugService类。
Slugify类
生成slug的所有逻辑都由SawaStacks\CodeIgniter\Slugify
类处理。
通常,您不需要直接访问此类,尽管有一个静态方法可以用来为给定的字符串生成slug,而不实际创建或保存相关的模型。您需要做的,就是在控制器中使用以下策略来生成唯一slug。
<?php namespace App\Controllers; use App\Controllers\BaseController; use App\Models\Post; use SawaStacks\CodeIgniter\Slugify; class TestController extends BaseController { public function index(){ $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 //Result for $slug: andre-francois-won-mathematics-competion-3 $post->save([ 'title'=>$title, 'slug'=>$slug ]); } }
以下是一些可能的示例,您可以在控制器中使用SlugService类生成唯一的slug
<?php namespace App\Controllers; use App\Controllers\BaseController; use App\Models\Post; use SawaStacks\CodeIgniter\Slugify; class TestController extends BaseController { public function index(){ $post = new Post(); $title = 'André & François won mathematics competion'; /** Default way. Both lines will return same result */ $slug = Slugify::table('posts')->make($title); $slug = Slugify::model(Post::class)->make($title); /** When you specify slug field name. defaul is 'slug' */ $slug = Slugify::table('posts')->make($title,'post_slug'); $slug = Slugify::model(Post::class)->make($title,'post_slug'); /** When you specify divider/separator for generated slug. default is '-' */ $slug = Slugify::table('posts','id')->make($title); $slug = Slugify::model(Post::class,'id')->make($title); /** When you specify divider/separator for generated slug. default is '-' */ $slug = Slugify::table('posts')->separator('_')->make($title); $slug = Slugify::model(Post::class)->separator('_')->make($title); //Result for $slug: 1: andre-francois-won-mathematics-competion //Result for $slug: 2: andre_francois_won_mathematics_competion } }
更新记录
当您不是插入新记录,而是更新现有记录时,您需要在链中添加一个额外的函数,即sid()
。以下是一个如何生成选定记录的新slug的示例。
<?php namespace App\Controllers; use App\Controllers\BaseController; use App\Models\Post; use SawaStacks\CodeIgniter\Slugify; class TestController extends BaseController { 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); } }
类参考
SawaStacks\CodeIgniter\Slugify
table()
参数
- 此方法有两个参数。第一个参数将是所需表的名字。第二个参数是模型表的键。例如:
model('products','pid')
。第二个参数的默认值是主键,即'id'。这意味着我们假设产品表有id列/字段。
model()
参数
- 此方法有两个参数。第一个参数是必需的,它是模型对象的实例。第二个参数是模态表的主键。例如:
model(Product::class,'pid')
。第二个参数(主键)的默认值是 'id'。这意味着我们假设产品表的结构中有一个名为 id 的列/字段。
sid()
参数
- 此方法有一个参数。该参数是必需的,并且必须是一个整数。例如:
sid(12)
。这个数字是所选行的 id。
separator()
参数
- 此方法有一个参数。在这里,您可以指定将包含在生成的 slug 中的分隔符。例如:
separator('_')
。默认值是破折号'-'
。
make()
参数
- 此方法有两个参数。第一个参数是从标题中获取的字符串值,是必需的。第二个参数是 slug 字段名。您可以在该方法中指定字段名。第二个参数的默认值是
'slug'
。例如:make('您选择的标题','slug')
版权和许可
此软件包由 Sawa Stacks 编写,并按照 MIT 许可证 发布。
版权(c)2023 Sawa Stacks。