v.Latest
Documentation
文件名自定义
在此页面上
默认情况下,Tina 不强制执行严格的文件名限制,因为操作系统支持多种格式。然而,如果需要,您可以在集合级别强制执行自定义限制。
文件名规则
- 文件名只能包含
a-z,A-Z,0-9,-,_,.或/。 - 文件名不能包含空格
- 生成的文件名在集合中必须是唯一的
- 如果文件名以
/开头,它将被视为相对于集合根目录的绝对路径- 例如:
/foo/bar/blog-post将被保存为<MyCollectionPath>/post/blog-post.md
- 如果文件名不以
/开头,它将被视为相对于当前文件夹的路径- 例如:
bar/blog-post将被保存为<MyCollectionPath>/<CurrentDirectory>/bar/blog-post.md
配置
属性 | 描述 |
|---|---|
| 阻止用户编辑文件名 |
| 一个基于表单值生成文件名的函数 |
| 一个在用户输入时清理文件名输入的函数 |
选项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'],},],},],},})