Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

This is a list of Contentful best practices, from content modeling workflow to Contentful App development.

Contentful’s Expand and Contract workflow

We can avoid breaking changes by using this method when implementing new features into the master environment of a Contentful space. Learn more via Contentful Learning Center.

TLDR; When we create new fields on a content type that may replace old ones, we do not want to remove them immediately causing some sort of break in the app we are building. Instead we should migrate the content from the old fields to the new and then disable the old fields, once changes are tested.

Migrating content from old fields to new fields with migration scripting.

We can also move content across different content types

https://github.com/contentful/contentful-migration#transformentriestotypeconfig

  • Migration script example for moving content between types

const MurmurHash3 = require("imurmurhash");

module.exports = function (migration) {
  migration.transformEntriesToType({
    // Old content type
    sourceContentType: "journey",
    // New content type
    targetContentType: "test",
    // Field we are transferring to new type
    from: ["journeyName", "journeyURLNickname"],
    // We can publish the new entries by setting this to true
    shouldPublish: false,
    // We can point to this content type on entries referencing the old type
    updateReferences: false,
    removeOldEntries: false,
    // This function creates a new id for the entry
    identityKey: function (fields) {
      const value = fields.journeyName["en-US"].toString();
      return MurmurHash3(value).result().toString();
    },
    // This function takes the value from the old content type fields and
    // transforms them to the new
    transformEntryForLocale: function (fromFields, currentLocale) {
      return {
        automateName: `$copy - ${fromFields.journeyName[currentLocale]}`,
        journeyName: `copy - ${fromFields.journeyName[currentLocale]}`,
        journeyURL: `copy - ${fromFields.journeyURLNickname[currentLocale]}`,
      };
    },
  });
};

  • No labels