Files
medusa-store/docs/content/plugins/cms/contentful/index.md
Shahed Nasser 6f1b49af03 chore: merge docs from master to develop (#3650)
* Fix issue on fixed total amount discount when using includes tax (#3472)

The calculation of the fixed discount amount breaks when having includes_tax setting active, due to the line item totals are incorrect and returning everything as 0, thus the totalItemPercentage will be Infinitiy due to the division by a subtotal of 0

* chore: Add missing changeset for @medusajs/medusa

* feat(medusa): Improve performance of Products domain (#3417)

* feat(medusa): Improve product update performances

* fix tests and update

* update mock repo

* improve repo

* cleanup

* fix

* cleanup + bulk emit + unit test fix

* improvements

* improve

* fix unit tests

* fix export

* fix product update handler

* enhance mock repo

* fix import integration

* fix end point tests

* revert mock repo product variant

* fix unit

* cleanup

* cleanup

* address feedback

* fix quotes in tests

* address feedback

* Create new-tips-mate.md

* use types

* chore: Remove integration-tests from changeset

* chore(release): v1.7.14

* chore(docs): Generated Docs Announcement Bar (automated) (#3489)

Co-authored-by: olivermrbl <olivermrbl@users.noreply.github.com>

* fix(medusa): EventBusService.emit using Redis mock (#3491)

* Fix eventBusService.emit using redis mock

* revert gitignore

* enqueuer

* unit test add redis_url

* fix test

* chore(docs): Generated Services Reference (automated) (#3490)

Co-authored-by: olivermrbl <olivermrbl@users.noreply.github.com>

* docs: publish restructure (#3496)

* docs: added features and guides overview page

* added image

* added version 2

* added version 3

* added version 4

* docs: implemented new color scheme

* docs: redesigned sidebar (#3193)

* docs: redesigned navbar for restructure (#3199)

* docs: redesigned footer (#3209)

* docs: redesigned cards (#3230)

* docs: redesigned admonitions (#3231)

* docs: redesign announcement bar (#3236)

* docs: redesigned large cards (#3239)

* docs: redesigned code blocks (#3253)

* docs: redesigned search modal and page (#3264)

* docs: redesigned doc footer (#3268)

* docs: added new sidebars + refactored css and assets (#3279)

* docs: redesigned api reference sidebar

* docs: refactored css

* docs: added code tabs transition

* docs: added new sidebars

* removed unused assets

* remove unusued assets

* Fix deploy errors

* fix incorrect link

* docs: fixed code responsivity + missing icons (#3283)

* docs: changed icons (#3296)

* docs: design fixes to the sidebar (#3297)

* redesign fixes

* docs: small design fixes

* docs: several design fixes after restructure (#3299)

* docs: bordered icon fixes

* docs: desgin fixes

* fixes to code blocks and sidebar scroll

* design adjustments

* docs: restructured homepage (#3305)

* docs: restructured homepage

* design fixes

* fixed core concepts icon

* docs: added core concepts page (#3318)

* docs: restructured homepage

* design fixes

* docs: added core concepts page

* changed text of different components

* docs: added architecture link

* added missing prop for user guide

* docs: added regions overview page (#3327)

* docs: added regions overview

* moved region pages to new structure

* docs: fixed description of regions architecture page

* small changes

* small fix

* docs: added customers overview page (#3331)

* docs: added regions overview

* moved region pages to new structure

* docs: fixed description of regions architecture page

* small changes

* small fix

* docs: added customers overview page

* fix link

* resolve link issues

* docs: updated regions architecture image

* docs: second-iteration fixes (#3347)

* docs: redesigned document

* design fixes

* docs: added products overview page (#3354)

* docs: added carts overview page (#3363)

* docs: added orders overview (#3364)

* docs: added orders overview

* added links in overview

* docs: added vercel redirects

* docs: added soon badge for cards (#3389)

* docs: resolved feedback changes + organized troubleshooting pages (#3409)

* docs: resolved feedback changes

* added extra line

* docs: changed icons for restructure (#3421)

* docs: added taxes overview page (#3422)

* docs: added taxes overview page

* docs: fix sidebar label

* added link to taxes overview page

* fixed link

* docs: fixed sidebar scroll (#3429)

* docs: added discounts overview (#3432)

* docs: added discounts overview

* fixed links

* docs: added gift cards overview (#3433)

* docs: added price lists overview page (#3440)

* docs: added price lists overview page

* fixed links

* docs: added sales channels overview page (#3441)

* docs: added sales overview page

* fixed links

* docs: added users overview (#3443)

* docs: fixed sidebar border height (#3444)

* docs: fixed sidebar border height

* fixed svg markup

* docs: added possible solutions to feedback component (#3449)

* docs: added several overview pages + restructured files (#3463)

* docs: added several overview pages

* fixed links

* docs: added feature flags + PAK overview pages (#3464)

* docs: added feature flags + PAK overview pages

* fixed links

* fix link

* fix link

* fixed links colors

* docs: added strategies overview page (#3468)

* docs: automated upgrade guide (#3470)

* docs: automated upgrade guide

* fixed vercel redirect

* docs: restructured files in docs codebase (#3475)

* docs: restructured files

* docs: fixed eslint exception

* docs: finished restructure loose-ends (#3493)

* fixed uses of backend

* docs: finished loose ends

* eslint fixes

* fixed links

* merged master

* added update instructions for v1.7.12

* docs: fixed discount details (#3499)

* docs: fix trailing slash causing 404 (#3508)

* docs: fix error during navigation (#3509)

* docs: removed the gatsby storefront guide (#3527)

* docs: removed the gatsby storefront guide

* docs: fixed query value

* chore(docs): Removed Docs Announcement Bar (automated) (#3536)

Co-authored-by: shahednasser <shahednasser@users.noreply.github.com>

* fix(medusa): Variant update should include the id for the listeners to be able to identify the entity (#3539)

* fix(medusa): Variant update should include the id for the listeners to be able to identify the entity

* fix unit tests

* Create brave-seahorses-film.md

* docs: fix admin redirects (#3548)

* chore(release): v1.7.15

* chore(docs): Generated Docs Announcement Bar (automated) (#3550)

Co-authored-by: olivermrbl <olivermrbl@users.noreply.github.com>

* chore(docs): Generated Services Reference (automated) (#3551)

Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action

Co-authored-by: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com>

* chore: updated READMEs of plugins (#3546)

* chore: updated READMEs of plugins

* added notice to plugins

* docs: added a deploy guide for next.js storefront (#3558)

* docs: added a deploy next.js guide

* docs: fix image zoom

* docs: fixes to next.js deployment guide to vercel (#3562)

* chore(workflows): Enable manual workflow in pre-release mode (#3566)

* chore(docs): Removed Docs Announcement Bar (automated) (#3598)

Co-authored-by: shahednasser <shahednasser@users.noreply.github.com>

* fix(medusa): Rounding issues on line item adjustments (#3446)

* chores(medusa): Attempt to fix discount rounding issues

* add migration

* update entities

* apply multipler factor properly

* fix discount service

* WIP

* fix rounding issues in discounts

* fix some tests

* Exclude raw_discount_total from responses

* fix adjustments

* cleanup response

* fix

* fix draft order integration

* fix order integration

* fix order integration

* address feedback

* fix test

* Create .changeset/polite-llamas-sit.md

* remove comment

---------

Co-authored-by: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com>

* chore(workflows): Add release notification (#3629)

---------

Co-authored-by: pepijn-vanvlaanderen <pepijn@webbers.com>
Co-authored-by: olivermrbl <oliver@mrbltech.com>
Co-authored-by: Adrien de Peretti <adrien.deperetti@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: olivermrbl <olivermrbl@users.noreply.github.com>
Co-authored-by: Carlos R. L. Rodrigues <37986729+carlos-r-l-rodrigues@users.noreply.github.com>
Co-authored-by: shahednasser <shahednasser@users.noreply.github.com>
Co-authored-by: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com>
2023-03-31 09:34:38 +02:00

12 KiB
Raw Blame History

description, addHowToData
description addHowToData
Learn how to integrate Contentful with the Medusa backend and a Gatsby storefront. Contentful is a headless CMS backend that provides rich CMS functionalities. true

Contentful

In this document, youll learn how to integrate a Medusa backend with Contentful to add rich Content Management System (CMS) functionalities

Overview

Contentful is a headless CMS service that allows developers to integrate rich CMS functionalities into any platform.

By integrating Contentful to Medusa, you can benefit from powerful features in your ecommerce store including detailed product CMS details, easy-to-use interface to use for static content and pages, localization, and much more.


Prerequisites

Needed Accounts

  • Contentful account with a space created. A space is created by default when you create a new account.

Required Tools


Install Medusa Backend Using Contentful Starter

Instead of using the default Medusa backend starter, you must use the Contentful starter to install a backend that is ready to be used with Contentful. This backend contains all the necessary files to make the integration work.

In your terminal, run the following command to install the backend:

medusa new medusa-contentful https://github.com/medusajs/medusa-starter-contentful

This installs a new Medusa backend in the directory medusa-contentful.

Add Contentful Environment Variables

Change to the medusa-contentful directory. In .env youll find three variables:

CONTENTFUL_SPACE_ID=
CONTENTFUL_ACCESS_TOKEN=
CONTENTFUL_ENV=

Value of CONTENTFUL_ENV

Set the value for CONTENTFUL_ENV to master.

Value of CONTENTFUL_SPACE_ID

To retrieve the value of CONTENTFUL_SPACE_ID, go to your Contentful Space dashboard. Then, choose Settings in the navigation bar and select API keys from the dropdown.

Click on Settings then select API keys from the dropdown

On the APIs page, click Add API Key.

Click on the Add API Key button

In the form, enter a name for the API key and click Save.

A form with the name of API key entered

Then, copy the value of Space ID and set it as the value of CONTENTFUL_SPACE_ID.

Value of CONTENTFUL_ACCESS_TOKEN

Go back to the API Keys page and click on the Content management tokens tab.

API Keys page with Content management tokens tab opened

Click on Generate personal token. A pop-up will open where you have to enter a name for the token.

Pop up model for Personal Access Token with token name entered

Once you click Generate, a personal access token will be generated. Use it to set the value of CONTENTFUL_ACCESS_TOKEN.

:::warning

Once you close the pop-up, you wont be able to get the value of the personal access token again. Make sure to copy it first.

:::

Configure Redis

In .env set the value of your Redis URL:

REDIS_URL=<YOUR_REDIS_URL>

Where <YOUR_REDIS_URL> is the URL of your Redis service.

:::tip

The default Redis URL is redis://localhost:6379.

:::

Configure PostgreSQL

In .env set the value of your PostgreSQL URL:

DATABASE_URL=<YOUR_DB_URL>

Where <YOUR_DB_URL> is the URL of your PostgreSQL database.

:::tip

You can find the format of the PostgreSQL database URL in PostgreSQLs documentation.

:::

Then, in medusa-config.js in the exported object, comment out or remove the SQLite database configurations and add the PostgreSQL database configurations:

module.exports = {
  projectConfig: {
    // ...
    database_url: DATABASE_URL,
    database_type: "postgres",
    // REMOVE OR COMMENT OUT THE BELOW:
    // database_database: "./medusa-db.sql",
    // database_type: "sqlite",
  },
}

Migrate Content Types to Contentful

The Contentful starter provides the necessary scripts to create content types in your Contentful space.

Run the following commands to migrate the content types into Contentful:

npm run migrate:contentful

Once this command finishes executing, in your Contentful Space dashboard click on Content Model in the navigation bar. You should see a list of new content models added.

Content Model page filled with new content models

Seed Content to Contentful

The next step is to seed the Contentful Space with some content data.

Run the following command to seed some data into it:

npm run seed:contentful

After this command finishes running, in your Contentful Space dashboard click on Content in the navigation bar. You should see a list of new content added.

Content page filled with new content

(Optional) Seed Medusa Database

This step seeds your Medusa database with demo data to easily add products as well as other data to your Medusa backend.

Run the following command to seed the Medusa database:

npm run seed

Start the Backend

To start the backend run the following command:

npm run start

If you seeded the database with demo data, you should see that events related to the products are triggered.

Seed the database

The Contentful integration ensures a two-way sync between the Medusa backend and Contentful. So, when new products are added to Medusa, these products will be added to your Contentful Space as well.


(Optional) Add Products with the Medusa Admin

Using the Medusa admin, you can add products to your Medusa backend. This will trigger product events that subsequently add these products to Contentful.


Manage Contentful Data

Publish Products

Products added through the integration with the Medusa backend are by default saved as drafts. To show them on the storefront, you must set them as published.

To do that, open your Contentful Space Dashboard and click on Content in the Navigation bar. Then, change Any to Product in the select field next to the search bar. This shows only the content of the type Product, rather than all content.

Click on the checkbox at the top of the table to select all products then click Publish to publish these products.

Select all products' checkboxes and click the publish button

On the homepage of the storefront, theres a featured products tile that shows a set of products. Before running the storefront, you must add at least one product to the list.

To do that, open your Contentful Space Dashboard and click on Content in the Navigation bar. Make sure the select field next to the search bar is set to Any and search for Featured Products. You should find one content of the type Tile Section.

Search for the featured products tile section

Click on it. You should find on the page an empty Tiles section where you can add tiles and products.

On the content's page find the empty tiles section

Click on Add content then on Add existing content and pick some of the products you want to show on the homepage.

Add at least 1 product as a tile

Once youre done adding products, click on Publish changes in the right sidebar.

Click on the publish changes button on the right


Setup Gatsby Storefront

In this section, youll set up the Gatsby storefront of your Medusa backend.

In your terminal in a different directory of the Medusa backend, run the following command:

gatsby new medusa-contentful-storefront https://github.com/medusajs/medusa-contentful-storefront

This will install the storefront in the directory medusa-contentful-storefront.

Set Contentful Environment Variables

Change to the newly created directory and rename .env.template:

mv .env.template .env

Then, open .env. You should find the following environment variables:

CONTENTFUL_SPACE_ID=
CONTENTFUL_ACCESS_TOKEN=

The value of CONTENTFUL_SPACE_ID is the same value you retrieved while setting up the Medusa backend.

To retrieve the value of CONTENTFUL_ACCESS_TOKEN, on your Contentful Space dashboard click on Settings then API keys. Then, choose the API key you created in the previous section.

You should find the field "Content Delivery API - access token”. Copy its value and set it as the value of CONTENTFUL_ACCESS_TOKEN.

Copy the value of the Content Delivery API access token

Start Storefront

Make sure the Medusa backend is still running. Then, start the storefront:

npm run start

This starts the storefront at localhost:8000. Open it in your browser and you should see on the homepage the Featured Product section with the products you chose on Contentful.

The storefront with the featured products section


Make Changes to Content

You can update the CMS content of your storefront in your Contentful Space. This includes the CMS pages or product details.

:::note

If you make changes to the data while your Gatsby storefront is running, the changes are not reflected instantly. Thats because the data is fetched from Contentful during build time. Instead, you must restart your Gatsby storefront to see the changes you make.

:::


Whats Next

Learn How to customize your Contentful backend and storefront.

See Also