Headless CMS Sanity 数据建模——定义文档内容的结构
定义内容的结构。
使用代码定义内容模型是设计使然。它使版本控制变得更容易,并使开发人员能够控制数据结构的布局方式。我们让在界面中添加、更改和删除字段变得毫不费力。
观看Schema 工作原理的视频,或滚动阅读它的工作原理。
你的第一个 Schema
当 Sanity 启动时,默认在项目 schemas
文件夹中查找 schema.js
。让我们来构建一个简单的 Schema 开始:
// 首先,必须引入 schema-creator
import createSchema from "part:@sanity/base/schema-creator";// 然后引入插件可能暴露的 Schema 类型expose them
import schemaTypes from "all:part:@sanity/base/schema-type";// 接着创建 Schema
export default createSchema({// 名称name: "mySchema",// 连接文档类型,目前只需要一个types: schemaTypes.concat([{// 类型显示名称title: "Person",//API 标识符name: "person",// 文档类型为 `document `type: "document",// 字段声明fields: [// 该文档类型仅有一个字段{// 显示名称title: "Name",// API 标识符name: "name",// 字段类型type: "string",},],},]),
});
这个 Schema 配置创建了一个 person
的文档类型,它包含一个 name
字段。
稍后通过 API 获取这样的文档时,我们会得到这样的文档:
{"_id": "45681087-46e7-42e7-80a4-65b776e19f91","_type": "person","name": "Ken Kesey"
}
一个文档引用另一个文档
现在来设计一个描述一本书的简单文档。类型数组中,我们添加这样一个对象:
{title: 'Book',name: 'book',type: 'document',fields: [{title: 'Title',name: 'title',type: 'string'},{title: 'Cover',name: 'cover',type: 'image'},{title: 'Author',name: 'author',// `reference` 类型来指向另一个文档type: 'reference',// 这个引用只允许指向 `person` 类型的文档// 虽然可以列举更多类型,但尽量保持精简:to: [{type: 'person'}]}]
}
这个 Schema 创建了一个叫做 book
的文档类型,它包含三个字段:
- 标题
- 封面图片
- 作者(该字段引用了另一个文档,在
to
字段里描述引用的文档类型。列出了一条规则为,类型可以是person
)
表单看起来是这个样子:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p8lP5bGO-1659519232132)(https://cdn.sanity.io/images/3do82whm/next/5ec1ee1a6caae30d9a6b83c8212cdffec3c3f4a4-691x764.png?w=691&h=764&fit=clip&auto=format)]
当通过 API 获取这个文档时,我们会得到:
{_id: "d1760c53-428c-4324-9297-ac8313276c45",_type: "book",title: "One Flew Over the Cuckoos Nest",cover: {_type: "image",asset: {_ref: "image-Su3NWQ712Yg0ACas3JN9VpcS-322x450-jpg",_type: "reference"}},author: {_ref: "45681087-46e7-42e7-80a4-65b776e19f91",_type: "reference"}
}
如您所见,作者字段没有提及 Ken Kesey,但字段 _ref
中包含了 Ken Kesey 文档的 id。当获取引用的文档时,可以轻松的通过指示 API 去体会为目标文档的实际内容。您可以在 Query 教程 中相关信息。
数组的一种使用
让我们谈谈数组:有些书有不止一位作者。我们应该通过将作者字段设置为引用数组来改进 Book 文档类型:
{title: 'Authors',name: 'authors',type: 'array',of: [{type: 'reference',to: [{type: 'person'}]}]
}
从 API 返回的文档将如下所示:
{_id: "drafts.e7f370d0-f86f-4a09-96ea-12f1d9b236c4",_type: "book",title: "The Illuminatus! Trilogy",cover: {_type: "image",asset: {_ref: "image-Ov3HwbkOYkNrM2yabmBr2M8T-318x473-jpg",_type: "reference"}},authors: [{_ref: "9a8eb52c-bf37-4d6e-9321-8c4674673198",_type: "reference"},{_ref: "ee58f2ff-33ed-4273-8031-b74b5664ff5e",_type: "reference"}]
}
组织架构
最后的注意点是组织你的文件(们)。在这个示例中,我们将两种类型文档的定义都堆积到了同一个 JS 文件中。不推荐这么做;这会很快让代码失控。推荐的做法是在每个单独的文件中描述每种文档类型:
// 文件: schemas/schema.js
import createSchema from 'part:@sanity/base/schema-creator'
import schemaTypes from 'all:part:@sanity/base/schema-type'
import person from './person'export default createSchema({name: 'mySchema',types: schemaTypes.concat([person])
})// 文件: schemas/person.js
export default {title: "Person",name: "person",type: "document",fields: [{title: "Name",name: "name",type: "string",}]
}
这涵盖了非常基础的内容,但还有更多内容!现在,让我们深入探讨使用 Sanity 对内容进行建模时的最佳实践。
Headless CMS Sanity 数据建模——定义文档内容的结构相关推荐
- 数据建模步骤文档_二维溃坝洪水模拟(五)二维模型建模
1 前言 本文主要说明案例中水库下游区域HEC-RAS二维建模的过程.文章首先给出建模的基本原则与建模的注意事项,确定了大致的研究区域.其次,整个下游洪水演进区域由单一二维模型模拟,下游存在一条较大的 ...
- 数据分析之如何制作数据埋点文档(二)
作者:Aaron(转载已取得作者授权) 在第一篇<数据分析之如何制作数据埋点文档>中已经对工作中应用的数据埋点的基础概念.基本分类.定义规范.流程以及应用场景做了简单的介绍,基于部分看官老 ...
- java将后台数据库查询到的数据导出word文档当中
java将后台数据库查询到的数据导出word文档当中 之前项目需求使用Java导出word文档,一直没有进行整理,今天把它进行整理出来,以便以后使用到:下面是导出的word文档. // 前端报告表格 ...
- JS实现获取word文档内容并输出显示到html页面示例,和将页面数据写入txt文件
JS实现获取word文档内容并输出显示到html页面示例 注意:这里使用了ActiveXObject组建,因此需要使用IE内核浏览器运行本代码. <!DOCTYPE html> <h ...
- html语言中,定义文档中一个正在打开的链接的颜色的代码是,2017微软认证考试精选练习(附答案)...
2017微软认证考试精选练习(附答案) 1.如果要使图像在缩放时不失真,在图像显示原始大小时,按下( )键,拖动 图像右下方 的控制点,可以按比例调整图像大小 B A. Ctrl B. Shift C ...
- CTS(16 )---Android 兼容性定义文档
Android 兼容性定义文档 欢迎阅读 Android 兼容性定义文档 (CDD).本文档列举了设备需要满足哪些要求才能与最新的 Android 版本兼容.为了与 Android 兼容,设备实现必须 ...
- java如何根据模板填充数据生成word文档
java根据模板填充数据生成word文档 这篇文章干什么? 思路总览 1.准备word模板 2.转换文件格式 3.编写代码 补充--下载流 这篇文章干什么? 使用代码将word模板内容进行替换,并 ...
- Springboot 项目导出word文档(文档内容包括数据以及服务器图片)
Springboot 项目freemarker导出word文档(文档内容包括数据以及服务器图片) 前些天有需求要完成导出word文档功能,基础数据导出word文档,网上也能搜到很多源代码,但是我这边要 ...
- [经典]数据产品需求文档怎么写?
何为数据产品? 从广义上讲,一切以数据作为驱动或者核心的都叫数据产品(例如数据报表平台.DMP.搜索与精准化产品.风控产品等等),从狭义上讲,就是公司的内部数据平台.今天和大家讨论的,主要是关于公司的 ...
最新文章
- php静态方法调用变量吗,php静态方法怎么调用非静态变量?
- mysql 计算gps坐标距离_mysql、sqlserver和php计算GPS经纬度坐标距离
- Pandas数据挖掘与分析时的常用方法
- APR分析-共享内存篇
- Spring Boot引用本地jar包
- php直接的模块接口,api(接口)模块
- JavaScript学习随记——错误类型
- yanobox nodes 3 Mac新一代点线粒子特效运动图形插件
- 创朵计算机维修,创建第一个计算机监控软件服务
- vue2.0中ckeckbox(复选框)的使用心得,及对click事件和change的理解
- elk 概念整理 集群状态 - yellow
- weblogic部署启动时报错(weblogic.application.ModuleException)
- HorizontalScrollView 仿真 tabLayout
- 对嵌入式开发方向的一些思考:在物联网方向
- Android 模拟器 连接局域网
- 【历史上的今天】4 月 3 日:亚马逊卖出第一本书;世界上第一通手机电话;IBM 计算机先驱出生
- 什么是微信SCRM客服系统
- 免费的office软件哪个好用
- 动态修改窗口标题和类名
- Java实现Redis的列表(List)命令