pauloamgomes / cockpitcms-betterslugs
Cockpit CMS的更好slug插件,提供了一种新的slug字段类型。
Requires
- php: >= 7.3
- composer/installers: ^1.10
Suggests
- aheinze/cockpit: Please install Cockpit before installing this addon
This package is auto-updated.
Last update: 2023-05-22 15:29:46 UTC
README
此插件通过提供可以用于自动生成您集合的slug字段的类型来增强Cockpit CMS。支持令牌以动态设置值(例如日期、字段等)。
部分灵感来源于Unique Slugs插件 https://github.com/raffaelj/cockpit_UniqueSlugs
安装
手动
下载最新版本并将其解压到COCKPIT_PATH/addons/BetterSlugs
目录
Git
git clone https://github.com/pauloamgomes/CockpitCMS-BetterSlugs.git ./addons/BetterSlugs
Cockpit CLI
php ./cp install/addon --name BetterSlugs --url https://github.com/pauloamgomes/CockpitCMS-BetterSlugs.git
Composer
- 请确保在项目的composer.json文件中定义了cockpit插件的路径
{ "name": "MY_PROJECT", "extra": { "installer-paths": { "cockpit/addons/{$name}": ["type:cockpit-module"] } } }
- 在项目根目录运行
composer require pauloamgomes/cockpitcms-betterslugs
使用
将一个slug类型的字段添加到您的集合中并配置一个格式,例如
{ "format": "[collection:name]/[date:Y]/[field:title]" }
对于名为post的集合,结果将类似于post/2019/your-post-title
,如果您想以/
开头,例如/post/2019/your-post-title
,请使用
{ "format": "/[collection:name]/[date:Y]/[field:title]" }
您也可以在slug中使用静态值,例如以blogs
开头,如blogs/2019/01/your-post-title
{ "format": "blogs/[date:Y]/[date:m]/[field:title]" }
如果您正在使用本地化并且希望slug前缀为相应的语言ID,例如en/post/2019/your-post-title
{ "format": "[lang:id]/blogs/[date:Y]/[date:m]/[field:title]" }
并使用自定义回调函数
{ "format": "blogs/[callback:slugUniqId]/[field:title]" }
假设您有slugUniqId函数(例如在boostrap.php插件文件中)
function slugUniqId($entry, $app, $lang = FALSE) { return uniqid(); }
它将返回类似于blogs/5c2ccc816619b/your-post-title
的结果
回调函数接收$entry数组作为参数。
目前支持以下令牌
- collection:value - 其中value是集合结构中的值(例如名称)
- date:value - 其中value是任何有效的PHP日期字符(例如Y,m,d,YMD等)
- field:value - 其中value是字段名称(例如标题)
- lang:id - 用语言ID替换令牌(例如en,fr,pt等)
- linkedField:value|param - 其中value是链接字段集合名称,param是来自链接集合的值,例如
"format": "countries/[linkedField:country|name]]/[field:title]"
如果我们有一个名为country的字段是集合链接,它将检索集合链接条目的值并提取名称字段,因此结果将类似于:countries/netherlands/my-title
- callback:value - 其中value是自定义回调函数
默认情况下,生成的slug是唯一的,因此如果您已配置具有格式的slug字段
"format": "blogs/[date:Y]/[date:m]/[field:title]"
并且您的字段标题是"Blog Test" blogs/2019/01/blog-test
,如果您插入另一个具有相同标题的条目,则结果将是blogs/2019/01/blog-test-1
,下一个将是blogs/2019/01/blog-test-2
。
只有当字段值为空时才自动生成slug,因此用户可以使用非生成值覆盖它。
支持本地化,只需在字段定义中启用,相应的字段语言名称(例如,slug、slug_en、slug_pt)将自动填充。
可以使用CLI命令来更新集合中的所有slug。
$ ./cp refresh-slugs --name blog_post Collection 'blog_post' - Refreshing slugs... Slug for 5c2cbece164bfc004d0b7595 updated to 'blogs/2019/01/test' Slug for 5c2cbf82164bfc0044192afc updated to 'blogs/2019/01/test-1' Slug for 5c2cbfaf164bfc00455447b4 updated to 'blogs/2019/01/test-2' Slug for 5c2cc22a164bfc00455447b7 updated to 'blogs/2019/01/another-post' Slug for 5c2ccc81164bfc00455447b9 updated to 'blogs/2019/01/testing-callback' Done! 9 entries updated in 0.032s
版权和许可
版权所有2019年pauloamgomes,根据MIT许可证。