Loving Tina? us on GitHub0.0k
v.Latest
Documentation

文件名自定义

在此页面上

默认情况下,Tina 不强制执行严格的文件名限制,因为操作系统支持多种格式。然而,如果需要,您可以在集合级别强制执行自定义限制。

文件名规则

  • 文件名只能包含 a-zA-Z0-9-_./
  • 文件名不能包含空格
  • 生成的文件名在集合中必须是唯一的
  • 如果文件名以 / 开头,它将被视为相对于集合根目录的绝对路径
    • 例如:/foo/bar/blog-post 将被保存为 <MyCollectionPath>/post/blog-post.md
  • 如果文件名不以 / 开头,它将被视为相对于当前文件夹的路径
    • 例如:bar/blog-post 将被保存为 <MyCollectionPath>/<CurrentDirectory>/bar/blog-post.md

配置

属性

描述

ui.filename.readonly

阻止用户编辑文件名

ui.filename.slugify

一个基于表单值生成文件名的函数

ui.filename.parse

一个在用户输入时清理文件名输入的函数

选项A:使用 parse 清理输入

parse 函数允许您在编辑器中强制执行文件名限制。提供的回调函数实时清理用户输入。

使用 parse 强制执行蛇形命名法的示例

export default defineConfig({
//...
schema: {
collections: [
{
label: "Blog Posts",
ui: {
filename: {
parse: (filename) => filename.replaceAll(" ","_"),
}
},
name: "post",
path: "content/post",
format: "mdx",
fields: [
//...
]
}
],
},
});

选项B:使用 slugify 生成文件名

使用 slugify 函数根据集合中的其他字段自动生成文件名。

slugify 函数仅在用户创建新文件时应用约束。用户在创建后仍然可以自由重命名文件。

使用 slugify 和只读的示例

export default defineConfig({
//...
schema: {
collections: [
{
label: 'Blog Posts',
name: 'post',
path: 'content/post',
format: 'md',
ui: {
filename: {
// 如果禁用,编辑器无法编辑文件名
readonly: true,
// 使用自定义 slugify 函数的示例
slugify: (values) => {
// Values 是一个包含表单所有值的对象。在此例中为 {title?: string, topic?: string}
return `${values?.topic || 'no-topic'}-${values?.title
?.toLowerCase()
.replace(/ /g, '-')}`
},
},
},
fields: [
{
type: 'string',
label: 'Title',
name: 'title',
},
{
type: 'string',
label: 'Topic',
name: 'topic',
options: ['programming', 'blacksmithing'],
},
],
},
],
},
})

使用默认 slugify 的示例

如果没有提供 slugify 函数,并且某个字段具有 isTitle: true,Tina 将使用默认的 slugify 函数。这将移除非字母数字字符并将空格替换为短划线。

export default defineConfig({
//...
schema: {
collections: [
{
label: 'Blog Posts',
name: 'post',
path: 'content/post',
format: 'md',
fields: [
{
type: 'string',
label: 'Title',
name: 'title',
// 如果没有提供 slugify 函数,则默认情况下将使用 "title" 字段生成文件名
isTitle: true,
required: true,
},
{
type: 'string',
label: 'Topic',
name: 'topic',
options: ['programming', 'blacksmithing'],
},
],
},
],
},
})
上次编辑: February 4, 2026