当前位置: 首页 > Web前端 > HTML

HeadlessCMSSanityDataModeling——定义文档内容的结构

时间:2023-03-28 11:42:47 HTML

定义内容的结构。使用代码定义内容模型是设计使然。它使版本控制更容易,并使开发人员能够控制数据结构的布局方式。我们使在界面中添加、更改和删除字段变得毫不费力。观看有关Schema工作原理的视频,或滚动阅读它的工作原理。您的第一个模式当Sanity启动时,它默认在项目模式文件夹中查找schema.js。让我们构建一个简单的Schema开始://首先,你必须导入schema-creatorimportcreateSchemafrom"part:@sanity/base/schema-creator";//然后引入插件可能暴露的Schema类型exposedtheimportschemaTypesfrom"all:part:@sanity/base/schema-type";//然后创建SchemaexportdefaultcreateSchema({//namename:"mySchema",//连接文档类型,目前只需要一种类型:schemaTypes.concat([{//Typedisplaynametitle:"Person",//APIidentifiername:"person",//文档类型为`document`type:"document",//字段声明字段:[//有只有一个文档typeField{//显示名称title:"Name",//API标识符name:"name",//字段类型type:"string",},],},]),});此架构配置创建包含名称字段的人员文档类型。稍后通过API获取此类文档时,我们会得到这样的文档:{"_id":"45681087-46e7-42e7-80a4-65b776e19f91","_type":"person","name":"KenKesey"一个文档引用另一个文档现在让我们设计一个描述一本书的简单文档。在类型数组中,我们添加这样一个对象:{title:'Book',name:'book',type:'document',fields:[{title:'Title',name:'title',type:'string'},{title:'Cover',name:'cover',type:'image'},{title:'Author',name:'author',//`reference`类型指向另一个文档类型:'reference',//这个引用只允许指向`person`类型的文档//虽然可以列出更多类型,但尽量保持简单:to:[{type:'person'}]}]}ThisSchema创建一个名为book的文档文档类型,其中包含三个字段:titlecoverimageauthor(该字段引用另一个文档,在to字段描述引用的文档类型。列出一条规则,类型可以是人)表单如下所示:通过API获取此文档时,我们将得到:{_id:"d1760c53-428c-4324-9297-ac8313276c45",_type:"book",标题:“飞越布谷鸟巢”,封面:{_type:“图像”,资产:{_ref:“image-Su3NWQ712Yg0ACas3JN9VpcS-322x450-jpg”,_type:“参考”}},作者:{_ref:“45681087-46e7-42e7-80a4-65b776e19f91",_type:"reference"}}可以看到,author字段没有提到KenKesey,但是字段_ref包含了KenKesey文档的id。在获取引用文档时,使用指示API可以很容易地了解目标文档的实际内容。您可以在查询教程中阅读更多相关信息。数组的一种用途让我们谈谈数组:有些书有不止一个作者。我们应该通过使作者字段成为引用数组来改进Book文档类型:{title:'Authors',name:'authors',type:'array',of:[{type:'reference',to:[{type:'person'}]}]}从API返回的文档将如下所示:{_id:"drafts.e7f370d0-f86f-4a09-96ea-12f1d9b236c4",_type:"book",title:"TheIlluminatus!Trilogy“,封面:{_type:“图像”,资产:{_ref:“image-Ov3HwbkOYkNrM2yabmBr2M8T-318x473-jpg”,_type:“参考”}},作者:[{_ref:“9a8eb52c-bf37-4d6e-9321-8c4674673198",_type:"reference"},{_ref:"ee58f2ff-33ed-4273-8031-b74b5664ff5e",_type:"reference"}]}组织最后要注意的是组织文件。在这个例子中,我们将两种类型文档的定义堆叠到同一个JS文件中。不推荐这样做;它可以很快让你的代码失控。推荐的做法是在单独的文件中描述每种文档类型://files:schemas/schema.jsimportcreateSchemafrom'part:@sanity/base/schema-creator'importschemaTypesfrom'all:part:@sanity/base/schema-type'importpersonfrom'./person'exportdefaultcreateSchema({name:'mySchema',types:schemaTypes.concat([person])})//file:schemas/person.jsexportdefault{title:"Person",name:"person",type:"document",fields:[{title:"Name",name:"name",type:"string",}]}这涵盖了非常基础的内容,但还有更多内容它!现在,让我们深入探讨使用Sanity对内容进行建模时的最佳实践。