如何在 Strapi 中向内容类型添加不可编辑的字段?
How to add a non-user-editable field to a content type in Strapi?
假设我有一个包含以下 4 个字段的 post
内容类型:
title
(字符串)
content
(字符串)
slug
(字符串)
author
(关系)
如何添加第 5 个字段,该字段的值取决于上述 4 个字段之一且用户不可编辑?比如说,我想要一个 wordCount
字段,其值是 content
字段中的单词数。为了合并此功能,我应该考虑探索哪个文件?
P.S.: 对于它的价值,我正在使用 MongoDB Atlas 来满足我的数据库需求。
您必须在内容类型中创建 wordCount
属性。
然后在左侧菜单的 内容管理器 link 中,您将能够自定义 edit/create 页面的视图。在这里,您可以禁用 或从页面中删除 字段。
之后,您必须进入 ./api/post/models/Post.js
文件并更新以下函数。
如果您使用的是 NoSQL 数据库 (Mongo)
beforeSave: async (model) => {
if (model.content) {
model.wordCount = model.content.length;
}
},
beforeUpdate: async (model) => {
if (model.getUpdate().content) {
model.update({
wordCount: model.getUpdate().content.length
});
}
},
如果您正在使用 SQL(SQLite、Postgres、MySQL)
beforeSave: async (model, attrs, options) => {
if (attrs.content) {
attrs.wordCount = attrs.content.length;
}
},
(对于 Strapi 3.x;否SQL 和 SQL)
- 在内容类型上创建字数统计字段
- 配置内容类型的视图并单击字数字段 - 将 'Editable field' 设置为 false。
- 编辑./api/post/models/post.js
'use strict';
module.exports = {
lifecycles: {
async beforeCreate(data) {
data.wordcount = data.content.match(/(\w+)/g).length;
},
async beforeUpdate(params, data) {
data.wordcount = data.content.match(/(\w+)/g).length;
},
},
};
假设我有一个包含以下 4 个字段的 post
内容类型:
title
(字符串)content
(字符串)slug
(字符串)author
(关系)
如何添加第 5 个字段,该字段的值取决于上述 4 个字段之一且用户不可编辑?比如说,我想要一个 wordCount
字段,其值是 content
字段中的单词数。为了合并此功能,我应该考虑探索哪个文件?
P.S.: 对于它的价值,我正在使用 MongoDB Atlas 来满足我的数据库需求。
您必须在内容类型中创建 wordCount
属性。
然后在左侧菜单的 内容管理器 link 中,您将能够自定义 edit/create 页面的视图。在这里,您可以禁用 或从页面中删除 字段。
之后,您必须进入 ./api/post/models/Post.js
文件并更新以下函数。
如果您使用的是 NoSQL 数据库 (Mongo)
beforeSave: async (model) => {
if (model.content) {
model.wordCount = model.content.length;
}
},
beforeUpdate: async (model) => {
if (model.getUpdate().content) {
model.update({
wordCount: model.getUpdate().content.length
});
}
},
如果您正在使用 SQL(SQLite、Postgres、MySQL)
beforeSave: async (model, attrs, options) => {
if (attrs.content) {
attrs.wordCount = attrs.content.length;
}
},
(对于 Strapi 3.x;否SQL 和 SQL)
- 在内容类型上创建字数统计字段
- 配置内容类型的视图并单击字数字段 - 将 'Editable field' 设置为 false。
- 编辑./api/post/models/post.js
'use strict';
module.exports = {
lifecycles: {
async beforeCreate(data) {
data.wordcount = data.content.match(/(\w+)/g).length;
},
async beforeUpdate(params, data) {
data.wordcount = data.content.match(/(\w+)/g).length;
},
},
};