Как добавить поле, не редактируемое пользователем, к типу контента в Strapi?

#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)

  1. Создайте поле wordcount для типа контента
  2. Настройте представление типа контента и щелкните по полю wordcount — установите для ‘Редактируемого поля’ значение false.
  3. Редактировать ./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;
    },
  },
};