fix(tags): use crc32-fallback slugger for Chinese tag names (HasSlug was blanking slugs)
Build and Deploy / verify (push) Successful in 11s
Build and Deploy / deploy (push) Successful in 17s

This commit is contained in:
2026-10-12 22:52:21 +00:00
parent 9c91f1bdec
commit d483577c90
3 changed files with 12 additions and 2 deletions
+1 -1
View File
@@ -344,8 +344,8 @@ class SablogImport extends Command
// 必须用 findFromString(内部按 locale 查询 JSON 键),否则每次导入都重复建标签
$tag = Tag::findFromString($tagName, 'post');
if (! $tag) {
// slug 由 spatie/tags 的 HasSlug 钩子用 tags.slugger(=SlugGenerator::slug)自动生成
$tag = new Tag(['name' => $tagName, 'type' => 'post']);
$tag->slug = SlugGenerator::make($tagName, 'tags', 'slug', fallback: 'tag-'.crc32($tagName));
$tag->save();
}
+10
View File
@@ -10,6 +10,16 @@ use Illuminate\Support\Str;
class SlugGenerator
{
/**
* spatie/tags 的 tags.slugger 回调:拉丁字符用 Str::slug,纯中文名回退 crc32 形式。
*/
public static function slug(string $string): string
{
$slug = Str::slug($string, '-', 'en');
return $slug === '' ? 'tag-'.crc32($string) : $slug;
}
/**
* 生成唯一 slug。中文标题自动回退为 $fallback 或 crc32 形式。
*/