基本概念
内容模型简介
Digimaker CMF内容模型的设计理念是, 通过一些配置, 自动生成类似于ORM的实体(entity), 然后通过api和后台管理来操作这些entity进而操作数据. 这好像与一般web框架一样, 但digimaker的数据类型是自带功能的.
比如你定义一个属性”标题”, 其类型是text(文本), 它在输入时自动就是个文本框(且自带数据验证); 如果你定义一个属性”封面图片”, 其类型是image(图片), 在输入时系统提供图片上传的界面.
下面的截屏是后台管理的输入界面, 里面所有的属性(标题, 描述, 封面图片, 主要产品, 是否必须, 供应方等)都是通过配置而来的, 当然你也可以创建自己的数据类型(我们叫域类型-fieldtype), 你也可以调用前台api来显示属性, 而不需要管它是怎么存储的.
典型的域类型有: 文本, 富文本, 图片, 数字, 时间, 关系(与其它内容关联起来).
下面是一个模型配置的例子:
"article": {
"name": "文章",
...
"fields": [{
"identifier": "title",
"type": "text",
"name": "标题",
"required": true
},
{
"identifier": "coverimage",
"type": "image",
"name": "封面图片",
"required": false
},
{
"identifier": "summary",
"type": "richtext",
"name": "简介",
"required": false,
"parameters": {
"mode":"compact"
}
}
]
}
所以digimaker对”内容”的定义比较广义, 除了一般意义上的文章、文件夹、图片、表单等是内容外, 像考试题、答案、产品是内容. 甚至定单也是内容 - 我们允许混合数据类型, 比如数据库的整型与digimaker的文本是可以混合使用, 这样你可以把digimaker的数据类型混合到数据表中即可使用digimaker的功能(比如定单的后期输入注释、分类选择等, 或者权限控制相关的功能)。
因此digimaker可适用于开发一般的web系统. 相比典型的cms系统, digimaker提供企业级的的内容模型, 而相比纯粹的web框架, digimaker自带与内容相关的功能(如输入界面, 查询操作api, 权限管理, 日志调试等), 当然digimaker也可与web框架一起使用.
内容模型贯穿在所有api中
上面提到的数据模型贯穿在所有digimaker的api中, 包括Go api(如查询, 创建等), REST API, 模板API中,
如何配置模型?
模型配置文件是config/contenttype.json, 配置好文件后运行命令可生成相应的实体(entity), 生成实体且重启服务后, 定义的属性自动会出现在后台管理界面上.
以下是dmdemo的例子, 每次修改contenttype.json后需要运行此命令来更新对应的enitity, 生成的entity会在entity目录下(如dmdemo/entity).
cd dmdemo
dmapp=. go run /Users/xc/go/src/github.com/digimakergo/digimaker/codegen/contenttypes/gen.go
默认会输出如下信息
Generating content entities for /Users/xc/go/src/github.com/digimakergo/dmdemo
Generating article
Generating usergroup
Generating role
Generating user
Generating image
Generating file
Generating folder
Generating frontpage