Хост плагинов
Хост плагинов - это уникальный маршрут в CMS Studio, который предлагает пустое полотно для отображения контента пользовательских приложений.
Приложения, разработанные для работы на хосте плагинов, полностью отвечают за рендеринг интерфейса страницы и могут получить доступ ко всем компонентам пользовательского интерфейса CMS Studio и API через глобальную переменную window.dccms в браузере или через npm-пакет @dccms/studio-ui при использовании стека разработки.
Вы можете перейти к хосту плагинов, войдя в CMS Studio и перейдя по адресу /studio/plugin. Например, в вашем локальном окружении URL будет http://localhost:8080/studio/plugin. Для рендеринга плагина хосту плагинов требуется от трех до пяти аргументов строки запроса.
Аргументы хоста плагинов:
|
Название |
Значение по умолчанию |
Описание |
|
|
требуется |
Id проекта, где установлен плагин |
|
|
требуется |
Имя директории категории внутри директории {sandbox}/config/studio/plugins |
|
|
требуется |
Имя директории плагинов внутри директории {sandbox}/config/studio/plugins/{type} |
|
|
index.js |
Имя файла, который плагин-хост должен загрузить. Это может быть HTML или JavaScript файл. |
|
|
ID плагина, когда приложение вложено в директорию с ID плагина |
Если аргументы не предоставлены, будет отображено сообщение, указывающее на отсутствующие аргументы. Предоставление необходимых аргументов позволяет плагину загрузиться и работать должным образом.
Хост плагинов загружает один файл, который может быть либо JavaScript (JS), либо HTML файлом, и этот файл отвечает за инициализацию приложения.
- JS файл:
- При загрузке файла JavaScript хост плагинов сначала загружает runtime-скрипты CMS Studio UI, а затем загружает ваш файл. Ваш JavaScript файл может получить доступ ко всем функциям runtime CMS Studio через
window.dccms - Вы можете писать на обычном JavaScript или использовать стек разработки, который транспилирует ваш код в конечный JavaScript файл, который будет загружен в браузере. Это полезно, если вы хотите использовать JSX или TypeScript.
- HTML файл:
- Когда вы загружаете HTML-файл, контент отображается точно так, как определено в HTML-файле. Поэтому DC CMS runtime (
window.dccms) не доступно до тех пор, пока вы сами это не включите. Для использования UI API или компонентов рекомендуется использовать пакет npm@dccms/studio-ui. Не рекомендуется вручную копировать и вставлять теги<script src="">из CMS Studio, так как они могут изменяться в новых версиях DC CMS. - При работе с HTML-файлом вы можете загружать дополнительные ресурсы, такие как скрипты, таблицы стилей, изображения и т. д., используя API загрузчика файлов плагина вместе со стандартными HTML-тегами. Например, для динамической загрузки JavaScript-файла можно использовать такой тег
script:<script src="/studio/1/plugin/file?siteId={SITE_ID}&type={CATEGORY}&name={NAME}&filename={FILE_NAME}"></script>
Если у вас есть приложение, которое нужно построить, например, через транспиляцию, у вас есть выбор либо хранить исходные файлы внутри вашего проекта DC CMS, либо в отдельном репозитории. Главное — убедиться, что завершенная сборка вашего плагина правильно помещена в директорию файлов плагинов, как описано здесь.
Использование набора инструментов Front-end разработки 
При создании вашего приложения с использованием инструментов, таких как webpack (включая CRA) или подобных, важно помнить, что базовый URL вашего приложения не будет просто “/”. Например, рассмотрим следующую структуру для веб-сайта под названием «Cofee Shop» с плагином под названием «bulk-edit»…
coffee-shop/authoring/static-assets/{pluginIdPath} <== Plugins root directory
apps/ <== Category directory
bulk-edit/ <== Plugin root directory
static/
index.js
css/
index.css
index.html
Чтобы правильно загрузить файл index.js, инструмент сборки может попытаться получить доступ к static/index.js, что приведет к ошибке 404. Чтобы исправить это, настройте базовый URL вашего инструмента на /studio/1/plugin/file?siteId=coffee-shop&type=apps&name=bulk-edit&filename=. Таким образом, конечный URL будет /studio/1/plugin/file?siteId=coffee-shop&type=apps&name=bulk-edit&filename=static/index.js, что обеспечит успешную загрузку файла.
При использовании CRA вы можете выполнить описанное выше, добавив файл .env.production и установив конфигурацию PUBLIC_URL, чтобы указать базовый URL.
PUBLIC_URL=/studio/1/plugin/file?siteId=coffee-shop&type=apps&name=bulk-edit&filename=
Мы рекомендуем вам использовать React и Material UI при разработке ваших приложений и виджетов. UI DC CMS создан на основе этих технологий, поэтому такая интеграция позволит вам добиться согласованности и обеспечить удобство использования для конечного пользователя.
Кроме того, вы сможете воспользоваться всеми возможностями UI CMS Studio, а также её утилитами и API. Ознакомьтесь ниже с образцами приложений, разработанных с использованием этих технологий, чтобы лучше понять, как они работают.
Обратите внимание, что при создании приложения с использованием пакета @dccms/studio-ui вы можете столкнуться с проблемой большого размера сборки. Это связано с тем, что вы, по сути, создаёте ещё одну CMS Studio.
Отображение приложения хоста плагинов в CMS Studio 
Иногда вашим требованиям может соответствовать автономное приложение, но для пользователей может быть полезно отображать приложение в модальном диалоге, не покидая интерфейс CMS Studio.
DC CMS предлагает уникальный компонент под названием PluginHostIFrame, который позволяет отображать плагин хост в iFrame с указанным приложением. При использовании с WidgetDialog этот плагин позволяет вызвать ваше приложение плагин хоста в интерфейсе CMS Studio в нужное вам время.
import { showWidgetDialog } from '@cms
cms/studio-ui/state/actions/dialogs';
import { useDispatch } from 'react-redux';
const dispatch = useDispatch();
dispatch(
showWidgetDialog({
title: 'Bulk Edit',
widget: {
id: 'cms.components.PluginHostIFrame',
configuration: {
plugin: { type: 'apps', name: 'bulk-edit', file: 'index.html' }
}
}
})
);
const dispatch = dccms.getStore().dispatch;
dispatch({
type: 'SHOW_WIDGET_DIALOG',
payload: {
title: 'Bulk Edit',
widget: {
id: 'сms.components.PluginHostIFrame',
configuration: {
plugin: { type: 'apps', name: 'bulk-edit', file: 'index.html' }
}
}
}
});
По умолчанию PluginHostIFrame будет использовать текущий активный проект, но он также может принимать аргумент site, если вы хотите отображать iFrame, содержащий приложение хоста плагинов из определенного проекта.
Пример 
Для примера рассмотрим сайт с названием "Coffee Shop" и id coffee-shop. Изначально мы создали категорию плагинов под названием apps, расположенную в {yourPluginDirectory}/authoring/static-assets/{pluginId}/apps. В этой категории мы развернули простое приложение для массового редактирования контента в директории bulk-edit, расположенной в {sandbox}/config/studio/plugins/apps/bulk-edit. Это приложение изначально было структурировано вокруг одного JavaScript файла с именем index.js.
Настроив наши файлы и директории плагина с использованием упомянутого JavaScript файла и установив его с помощью cms-cli команды copy-plugin, мы смогли получить доступ к интерфейсу плагина Bulk Edit по адресу /studio/plugin?site=cofee-shop&type=apps&name=bulk-edit.
Поскольку требования к приложению возросли, и его пользовательский интерфейс стал более сложным, мы решили обновить его до полнофункционального приложения с использованием хэш-маршрутизации. Для этого мы выбрали инструменты типа Create React App или Angular CLI. В результате точка входа была перенесена с index.js на файл index.html, который обычно генерируется этими инструментами. Для эффективной работы обновленного приложения мы теперь загружаем index.html вместо оригинального index.js.
В результате интерфейс плагина Bulk Edit теперь доступен по адресу /studio/plugin?site=coffee-shop&type=apps&name=bulk-edit&file=index.html.