Создание headless проекта

В этой статье вы найдете пошаговую инструкцию о том, как создать ваш первый headless проект с помощью DC CMS.

В этой статье вы узнаете, как создать проект, используя встроенный шаблон под названием "Headless Store". Мы покажем:

  • как добавить новый продукт в каталог вашего проекта
  • как опубликовать внесенные изменения
  • как получить продукт из вашего проекта

Создание проекта

После входа в систему вы попадете на экран "Проекты", где вам нужно нажать на Создать проект.

Изображение статьи

На экране "Создать проект" вам будут предложены доступные шаблоны или возможность использовать удаленный Git-репозиторий вместо выбора шаблона из списка. Прокрутите диалоговое окно, чтобы увидеть стандартные шаблоны, предоставленные CMS Studio, включая возможность использовать удаленный Git-репозиторий.

В нашем примере мы будем использовать шаблон "Headless Store". Шаблоны предоставляют вам отправную точку для вашего сайта. Вы также можете создать и добавить в систему свои собственные новые шаблоны. Нажмите на Использовать под шаблоном "Headless Store". 

Изображение статьи

Присвойте имя проекту и добавьте описание. Нажмите на Обзор, чтобы проверить свои данные перед созданием нового проекта.

Изображение статьи

Нажмите на Создать проект и дождитесь, пока система настроит ваш проект на основе шаблона.

Изображение статьи

Появится индикатор загрузки, пока система создает конфигурацию, контент проекта и права доступа на основе предоставленного шаблона. 

Когда все будет готово, вы будете перенаправлены на предварительный просмотр вашего проекта. 

Изображение статьи

Теперь ваш проект настроен, и вы можете начинать добавлять или редактировать контент.

Чтобы редактировать контент на странице, нажмите на три точки рядом с URL-адресом страницы на панели инструментов вверху, а затем выберите Изменить

Изображение статьи

Откроется форма , где вы можете редактировать содержимое страницы.

Изображение статьи

Добавление нового продукта в каталог

Обратите внимание, что проект на основе шаблона “Headless Store” в основном состоит из компонентов “компания” и “продукт”. Чтобы добавить новый продукт, откройте боковую панель и перейдите к Элементы > items > products. Нажмите на три точки рядом с папкой products, затем выберите Новый контент.

Изображение статьи

Откроется шаблон компонента продукта, и мы можем начать заполнять свойства создаваемого нами продукта. Для примера мы добавим продукт “Плюшевый медведь”. Нам нужно указать название и внутреннее название ("Медведь"), а также описание ("Плюшевый медведь").

Изображение статьи

Теперь можно загрузить изображение нового продукта, выбрать категорию и тег (если необходимо), установить цену и, наконец, добавить/выбрать компанию, которая произвела продукт, нажав на Добавить в поле Company. После настройки параметров товара, нажмите на Сохранить и закрыть.

Изображение статьи

Теперь в каталоге нашего магазина отображается только что созданный нами товар.

Изображение статьи

Вы можете добавлять больше продуктов/компаний или изменять/удалять существующие продукты/компании в зависимости от ваших нужд.

Чтобы удалить или изменить существующий продукт/компанию, перейдите к продукту/компании через боковую панель. Щелкните правой кнопкой мыши по продукту/компании, а затем выберите действие, которое вы хотите выполнить над элементом (например, Изменить или Удалить).

Изображение статьи

Публикация изменений

Сразу после создания проекта при помощи шаблона “Headless Store” проект нужно опубликовать. После непосредственной публикации любые правки или новые элементы также нужно будет каждый раз публиковать, чтобы аудитория вашего проекта могла видеть изменения.

Для публикации сначала через боковую панель перейдите к элементу, который хотите опубликовать, затем нажмите на три точки рядом с ним и выберите Опубликовать

Изображение статьи

Вам будет предложено опубликовать элемент сразу же или запланировать публикацию на более позднюю дату и время. Если это первая публикация проекта, появится уведомление, что будет опубликован весь проект.

Изображение статьи

Подробнее о создании, изменении и публикации контента можно узнать здесь.

Извлечение продукта из проекта

Теперь мы получим продукт из проекта, используя один из доступных API для извлечения контента.

Для примера предположим, что мы не уверены в URL-адресах некоторых продуктов, поэтому мы используем API "Get Children", чтобы получить список продуктов в /site/items/products. ID нашего проекта — my-store, который будет использоваться в параметре cmsSite для указания проекта.

Вот запрос, который мы отправим: http://localhost:8080/api/1/site/content_store/children.json?url=/site/items/products&cmsSite=my-store

Так будет выглядеть ответ:

[

  {

    "name": "0f08bd09-622d-816f-4f81-f3975947d9af.xml",

    "url": "/site/items/products/0f08bd09-622d-816f-4f81-f3975947d9af.xml",

    "descriptorUrl": "/site/items/products/0f08bd09-622d-816f-4f81-f3975947d9af.xml",

    "descriptorDom": {

      "component": {

        "content-type": "/component/product",

        "display-template": null,

        "merge-strategy": "inherit-levels",

        "objectGroupId": "0f08",

        "objectId": "0f08bd09-622d-816f-4f81-f3975947d9af",

        "file-name": "0f08bd09-622d-816f-4f81-f3975947d9af.xml",

        "internal-name": "Cards",

        "name_s": "Cards",

        "price_d": "10.5",

        "categories_o": {

          "item": {

            "key": "board",

            "value_smv": "Board"

          }

        },

        "tags_o": {

          "item": {

            "key": "groups",

            "value_smv": "Groups"

          }

        },

        "image_s": "/static-assets/images/products/cards.jpeg",

        "company_o": {

          "item": {

            "key": "/site/items/companies/9ea03b5c-e199-5e07-aa60-1997dcefbd4c.xml",

            "value": "Company 2",

            "include": "/site/items/companies/9ea03b5c-e199-5e07-aa60-1997dcefbd4c.xml",

            "disableFlattening": "false"

          }

        },

        "description_html": "<p>Classic Cards</p>",

        "createdDate": "2017-05-12T16:47:33.000Z",

        "createdDate_dt": "2017-05-12T16:47:33.000Z",

        "lastModifiedDate": "2017-05-15T17:19:26.000Z",

        "lastModifiedDate_dt": "2017-05-15T17:19:26.000Z",

        "disabled": "false"

      }

    },

    "properties": null,

    "folder": false

  },

  {

    "name": "11cc0cd3-55e4-ae2e-6f2d-a349486c0b84.xml",

    "url": "/site/items/products/11cc0cd3-55e4-ae2e-6f2d-a349486c0b84.xml",

    "descriptorUrl": "/site/items/products/11cc0cd3-55e4-ae2e-6f2d-a349486c0b84.xml",

    "descriptorDom": {

      "component": {

        "content-type": "/component/product",

        "display-template": null,

        "merge-strategy": "inherit-levels",

        "objectGroupId": "11cc",

        "objectId": "11cc0cd3-55e4-ae2e-6f2d-a349486c0b84",

        "file-name": "11cc0cd3-55e4-ae2e-6f2d-a349486c0b84.xml",

        "internal-name": "Plane",

        "name_s": "Plane",

        "price_d": "5.5",

        "image_s": "/static-assets/images/products/toy-plane.jpeg",

        "categories_o": {

          "item": {

            "key": "cars",

            "value_smv": "Cars"

          }

        },

        "tags": null,

        "company_o": {

          "item": {

            "key": "/site/items/companies/8b868a29-3b70-a461-efa1-7b4555bdc60c.xml",

            "value": "Company 1",

            "include": "/site/items/companies/8b868a29-3b70-a461-efa1-7b4555bdc60c.xml",

            "disableFlattening": "false"

          }

        },

        "description_html": "<p>Small toy plane</p>",

        "createdDate": "2017-05-11T20:6:23.000Z",

        "createdDate_dt": "2017-05-11T20:6:23.000Z",

        "lastModifiedDate": "2017-05-12T16:27:53.000Z",

        "lastModifiedDate_dt": "2017-05-12T16:27:53.000Z"

      }

    },

    "properties": null,

    "folder": false

  },

  {

    "name": "167f4a61-a9a2-54ec-a87d-6195634c65dd.xml",

    "url": "/site/items/products/167f4a61-a9a2-54ec-a87d-6195634c65dd.xml",

    "descriptorUrl": "/site/items/products/167f4a61-a9a2-54ec-a87d-6195634c65dd.xml",

    "descriptorDom": {

      "component": {

        "content-type": "/component/product",

        "display-template": null,

        "merge-strategy": "inherit-levels",

        "objectGroupId": "167f",

        "objectId": "167f4a61-a9a2-54ec-a87d-6195634c65dd",

        "file-name": "167f4a61-a9a2-54ec-a87d-6195634c65dd.xml",

        "internal-name": "Rubik's",

        "name_s": "Rubik's",

        "price_d": "15",

        "categories_o": {

          "item": {

            "key": "board",

            "value_smv": "Board"

          }

        },

        "tags_o": {

          "item": {

            "key": "learning",

            "value_smv": "Learning"

          }

        },

        "image_s": "/static-assets/images/products/cube.jpg",

        "company_o": {

          "item": {

            "key": "/site/items/companies/9ea03b5c-e199-5e07-aa60-1997dcefbd4c.xml",

            "value": "Company 2",

            "include": "/site/items/companies/9ea03b5c-e199-5e07-aa60-1997dcefbd4c.xml",

            "disableFlattening": "false"

          }

        },

        "description_html": "<p>Classic Rubik&#39;s Cube</p>",

        "createdDate": "2017-05-12T16:43:17.000Z",

        "createdDate_dt": "2017-05-12T16:43:17.000Z",

        "lastModifiedDate": "2017-05-12T16:50:30.000Z",

        "lastModifiedDate_dt": "2017-05-12T16:50:30.000Z"

      }

    },

    "properties": null,

    "folder": false

  },

  {

    "name": "72f3b00c-2baa-0a0d-da2a-5ed9be3f74eb.xml",

    "url": "/site/items/products/72f3b00c-2baa-0a0d-da2a-5ed9be3f74eb.xml",

    "descriptorUrl": "/site/items/products/72f3b00c-2baa-0a0d-da2a-5ed9be3f74eb.xml",

    "descriptorDom": {

      "component": {

        "content-type": "/component/product",

        "display-template": null,

        "merge-strategy": "inherit-levels",

        "objectGroupId": "72f3",

        "objectId": "72f3b00c-2baa-0a0d-da2a-5ed9be3f74eb",

        "file-name": "72f3b00c-2baa-0a0d-da2a-5ed9be3f74eb.xml",

        "internal-name": "Chess",

        "name_s": "Chess",

        "price_d": "50",

        "categories_o": {

          "item": {

            "key": "board",

            "value_smv": "Board"

          }

        },

        "tags_o": {

          "item": [

            {

              "key": "groups",

              "value_smv": "Groups"

            },

            {

              "key": "learning",

              "value_smv": "Learning"

            }

          ]

        },

        "image_s": "/static-assets/images/products/chess.jpeg",

        "company_o": {

          "item": {

            "key": "/site/items/companies/9ea03b5c-e199-5e07-aa60-1997dcefbd4c.xml",

            "value": "Company 2",

            "include": "/site/items/companies/9ea03b5c-e199-5e07-aa60-1997dcefbd4c.xml",

            "disableFlattening": "false"

          }

        },

        "description_html": "<p>Chess</p>",

        "createdDate": "2017-05-12T16:1:58.000Z",

        "createdDate_dt": "2017-05-12T16:1:58.000Z",

        "lastModifiedDate": "2017-05-12T16:24:38.000Z",

        "lastModifiedDate_dt": "2017-05-12T16:24:38.000Z"

      }

    },

    "properties": null,

    "folder": false

  },

  {

    "name": "89b4a941-8bad-cf6b-4c0c-3baf52baa003.xml",

    "url": "/site/items/products/89b4a941-8bad-cf6b-4c0c-3baf52baa003.xml",

    "descriptorUrl": "/site/items/products/89b4a941-8bad-cf6b-4c0c-3baf52baa003.xml",

    "descriptorDom": {

      "component": {

        "content-type": "/component/product",

        "display-template": null,

        "merge-strategy": "inherit-levels",

        "objectGroupId": "89b4",

        "objectId": "89b4a941-8bad-cf6b-4c0c-3baf52baa003",

        "file-name": "89b4a941-8bad-cf6b-4c0c-3baf52baa003.xml",

        "internal-name": "Car",

        "name_s": "Car",

        "price_d": "10.0",

        "image_s": "/static-assets/images/products/toy-car.jpg",

        "categories_o": {

          "item": {

            "key": "cars",

            "value_smv": "Cars"

          }

        },

        "tags": null,

        "company_o": {

          "item": {

            "key": "/site/items/companies/8b868a29-3b70-a461-efa1-7b4555bdc60c.xml",

            "value": "Company 1",

            "include": "/site/items/companies/8b868a29-3b70-a461-efa1-7b4555bdc60c.xml",

            "disableFlattening": "false"

          }

        },

        "description_html": "<p>Small Car</p>",

        "createdDate": "2017-05-11T17:43:45.000Z",

        "createdDate_dt": "2017-05-11T17:43:45.000Z",

        "lastModifiedDate": "2017-05-12T16:28:29.000Z",

        "lastModifiedDate_dt": "2017-05-12T16:28:29.000Z"

      }

    },

    "properties": null,

    "folder": false

  },

  {

    "name": "9cab74a4-0198-6cf9-2798-93ad67aada05.xml",

    "url": "/site/items/products/9cab74a4-0198-6cf9-2798-93ad67aada05.xml",

    "descriptorUrl": "/site/items/products/9cab74a4-0198-6cf9-2798-93ad67aada05.xml",

    "descriptorDom": {

      "component": {

        "content-type": "/component/product",

        "display-template": null,

        "merge-strategy": "inherit-levels",

        "objectGroupId": "9cab",

        "objectId": "9cab74a4-0198-6cf9-2798-93ad67aada05",

        "file-name": "9cab74a4-0198-6cf9-2798-93ad67aada05.xml",

        "internal-name": "Duck",

        "name_s": "Duck",

        "price_d": "15",

        "image_s": "/static-assets/images/products/duck.jpeg",

        "categories_o": {

          "item": {

            "key": "dolls",

            "value_smv": "Dolls"

          }

        },

        "tags": null,

        "company_o": {

          "item": {

            "key": "/site/items/companies/8b868a29-3b70-a461-efa1-7b4555bdc60c.xml",

            "value": "Company 1",

            "include": "/site/items/companies/8b868a29-3b70-a461-efa1-7b4555bdc60c.xml",

            "disableFlattening": "false"

          }

        },

        "description_html": "<p>Small rubber duck.</p>",

        "createdDate": "2017-05-12T16:26:10.000Z",

        "createdDate_dt": "2017-05-12T16:26:10.000Z",

        "lastModifiedDate": "2017-05-12T16:26:10.000Z",

        "lastModifiedDate_dt": "2017-05-12T16:26:10.000Z"

      }

    },

    "properties": null,

    "folder": false

  },

  {

    "name": "ff16a7a8-1948-38e6-7808-5a590f60ff85.xml",

    "url": "/site/items/products/ff16a7a8-1948-38e6-7808-5a590f60ff85.xml",

    "descriptorUrl": "/site/items/products/ff16a7a8-1948-38e6-7808-5a590f60ff85.xml",

    "descriptorDom": {

      "component": {

        "content-type": "/component/product",

        "display-template": null,

        "merge-strategy": "inherit-levels",

        "objectGroupId": "ff16",

        "objectId": "ff16a7a8-1948-38e6-7808-5a590f60ff85",

        "file-name": "ff16a7a8-1948-38e6-7808-5a590f60ff85.xml",

        "internal-name": "Dice",

        "name_s": "Dice",

        "price_d": "2.5",

        "categories_o": {

          "item": {

            "key": "board",

            "value_smv": "Board"

          }

        },

        "tags": null,

        "image_s": "/static-assets/images/products/dices.jpeg",

        "company_o": {

          "item": {

            "key": "/site/items/companies/9ea03b5c-e199-5e07-aa60-1997dcefbd4c.xml",

            "value": "Company 2",

            "include": "/site/items/companies/9ea03b5c-e199-5e07-aa60-1997dcefbd4c.xml",

            "disableFlattening": "false"

          }

        },

        "description_html": "<p>Simple dice.</p>",

        "createdDate": "2017-05-12T16:37:36.000Z",

        "createdDate_dt": "2017-05-12T16:37:36.000Z",

        "lastModifiedDate": "2017-05-12T16:37:36.000Z",

        "lastModifiedDate_dt": "2017-05-12T16:37:36.000Z"

      }

    },

    "properties": null,

    "folder": false

  }

]

Copy-icon

Чтобы извлечь конкретный продукт, используйте API Get Item для извлечения элемента из хранилища контента. Не забудьте установить параметр cmsSite при выполнении запроса.

Запрос: http://localhost:8080/api/1/site/content_store/item.json?url=/site/items/products/72f3b00c-2baa-0a0d-da2a-5ed9be3f74eb.xml&cmsSite=my-store

Ответ:

{

  "name": "72f3b00c-2baa-0a0d-da2a-5ed9be3f74eb.xml",

  "url": "/site/items/products/72f3b00c-2baa-0a0d-da2a-5ed9be3f74eb.xml",

  "descriptorUrl": "/site/items/products/72f3b00c-2baa-0a0d-da2a-5ed9be3f74eb.xml",

  "descriptorDom": {

    "component": {

      "content-type": "/component/product",

      "display-template": null,

      "merge-strategy": "inherit-levels",

      "objectGroupId": "72f3",

      "objectId": "72f3b00c-2baa-0a0d-da2a-5ed9be3f74eb",

      "file-name": "72f3b00c-2baa-0a0d-da2a-5ed9be3f74eb.xml",

      "internal-name": "Chess",

      "name_s": "Chess",

      "price_d": "50",

      "categories_o": {

        "item": {

          "key": "board",

          "value_smv": "Board"

        }

      },

      "tags_o": {

        "item": [

          {

            "key": "groups",

            "value_smv": "Groups"

          },

          {

            "key": "learning",

            "value_smv": "Learning"

          }

        ]

      },

      "image_s": "/static-assets/images/products/chess.jpeg",

      "company_o": {

        "item": {

          "key": "/site/items/companies/9ea03b5c-e199-5e07-aa60-1997dcefbd4c.xml",

          "value": "Company 2",

          "include": "/site/items/companies/9ea03b5c-e199-5e07-aa60-1997dcefbd4c.xml",

          "disableFlattening": "false"

        }

      },

      "description_html": "<p>Chess</p>",

      "createdDate": "2017-05-12T16:1:58.000Z",

      "createdDate_dt": "2017-05-12T16:1:58.000Z",

      "lastModifiedDate": "2017-05-12T16:24:38.000Z",

      "lastModifiedDate_dt": "2017-05-12T16:24:38.000Z"

    }

  },

  "properties": null,

  "folder": false

}

Copy-icon

Связанные статьи

 Управление контентом в DC CMS