#strapi
#strapi
Вопрос:
Допустим, у меня есть post
тип контента со следующими 4 полями:
title
(строка)content
(строка)slug
(строка)author
(взаимосвязь)
Как я могу добавить 5-е поле, значение которого зависит от одного из вышеупомянутых 4 полей и не доступно для редактирования пользователем? Скажем, я хотел wordCount
поле с количеством слов в content
поле в качестве его значения. Какой файл мне следует рассмотреть, чтобы включить эту функциональность?
PS: Как бы то ни было, я использую MongoDB Atlas для нужд своей базы данных.
Ответ №1:
Вам нужно будет создать свой wordCount
атрибут в вашем типе контента.
Затем по ссылке content manager в левом меню вы сможете настроить вид вашей страницы редактирования / создания. Здесь вы сможете отключить или удалить это поле со страницы.
После этого вам нужно будет зайти в ./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;
}
},
Ответ №2:
(Для Strapi 3.x; NoSQL и SQL)
- Создайте поле wordcount для типа контента
- Настройте представление типа контента и щелкните по полю wordcount — установите для ‘Редактируемого поля’ значение 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;
},
},
};