Общая информация о плагинах
Что такое плагины?
Плагин содержит в себе одно или несколько расширений для DC CMS, которые могут:
-
Расширять функциональность CMS Studio:
- интегрировать виджеты редактирования CMS Studio, влияющие на боковую панель и другие элементы пользовательского интерфейса
- внедрять встроенные приложения, отображаемые на отдельных страницах в CMS Studio
- добавлять дополнительные расширения для формы типа контента, включая источники данных и компоненты
- реализовывать серверный код и сервисы, управляющие расширениями пользовательского интерфейса CMS Studio
-
Расширять функциональность CMS Engine и проекта/веб-приложения:
- вводить новые типы контента вместе с их Groovy-контроллерами и шаблонами FreeMarker
- интегрировать REST API и/или серверный код
- добавлять сторонние интеграции в ваше веб-приложение
В общем, плагины предоставляют пользователям возможность дополнить или расширить функциональность и возможности сайта или мобильного приложения, а также улучшить опыт создания контента. Примеры функциональностей, которые пользователи могут хотеть внедрить в свои веб-приложения, включают форму обратной связи, чат-бота или аналитику веб-сайта.
Плагины создания контента
Плагины создания контента (authoring plugins) - это те плагины, которые позволяют расширять CMS Studio с помощью виджетов пользовательского интерфейса, приложений и серверных служб.
Виджеты и автономные приложения
В CMS Studio существует две категории плагинов пользовательского интерфейса (UI):
-
UI виджеты: предназначены для интеграции в различные разделы пользовательского интерфейса CMS Studio.
-
Самостоятельные (автономные) приложения: независимые приложения, работающие в пределах страницы Plugin Host.
Плагины могут взаимодействовать с клиентскими компонентами CMS Studio (React), сервисами и утилитами, используя два основных метода:
-
При использовании
npm
вы можете добавить пакет@cms/studio-ui
с помощью командыyarn add
илиnpm i
. -
Во время выполнения в браузере CMS Studio доступ к функционалу осуществляется через глобальный объект
window.dccms
:- Следующие пространства имен доступны через
window.cms
:libs
предоставляет доступ к сторонним технологиям, которые обеспечивают работу пользовательского интерфейса CMS Studio- React
- ReactDOM/Client
- MaterialUI
- ReactRedux
- ReactIntl
- createEmotion
- ReduxToolkit (createAction)
- RxJS
- Emotion (createEmotion)
components
включает в себя компоненты пользовательского интерфейса CMS Studio.icons
содержит иконки пользовательского интерфейса CMS Studio.utils
cодержит утилиты для выполнения задач, таких как отправка AJAX-запросов, манипулирование объектами, массивами, строками, путями, типами контента и др.services
cодержит функции для вызова API CMS Studio, категоризованные по модулям (например, пользователи, группы, сайты, аутентификация, типы контента и т. д.).getStore
возвращает хранилище Redux, обеспечивающее функционирование пользовательского интерфейса.
- Следующие пространства имен доступны через
Рекомендуется разрабатывать приложения и виджеты с использованием React и Material UI для оптимальной интеграции и хорошего пользовательского опыта, учитывая, что пользовательский интерфейс DC CMS разработан с использованием этих технологий. Этот подход позволяет использовать все компоненты, утилиты и API CMS Studio.
Сервисы
Через плагины редактирования вы можете добавлять свои собственные скрипты REST-сервисов API.
Например, вы можете захотеть создать API для подключения и/или мониторинга служб AWS и создать расширение пользовательского интерфейса (UI) для использования ваших API.
Delivery Plugins
Delivery Plugins позволяют вам расширить проект DC CMS, добавив типы контента (и все, что связано с типами контента) и REST API.
Типы контента
У вас есть возможность добавлять типы контента вместе с их определениями, Groovy-контроллерами, шаблонами Freemarker и связанными ресурсами.
Например, такой delivery-плагин, как компонент видео с YouTube. Этот плагин включает в себя определение типа контента, шаблон Freemarker, а также компоненты JavaScript и CSS, необходимые для отображения типа контента. После установки расширения, которое включает этот тип контента, авторы получают возможность легко интегрировать компонент видео с YouTube в свой контент, что позволяет легко добавлять видео.
Скрипты
Скрипты позволяют вам добавлять API в ваше проектное приложение DC CMS.
Шаблоны
Интегрируя delivery-плагины, вы можете внедрить шаблоны Freemarker в ваш проект. Эти шаблоны служат основой для визуализации определенного типа контента или действуют как точка подключения Freemarker-шаблона. То есть у вас есть возможность добавлять шаблоны для визуализации типов контента вашего расширения или улучшения функциональности страниц с использованием точек подключения (хуков) Freemarker-шаблонов.
Точки подключения (хуки) Freemarker-шаблонов
DC CMS предоставляет встроенный механизм, известный как "хук", который позволяет включать разметку и определять макросы для плагинов с использованием шаблонов Freemarker. Когда плагин использует один из этих шаблонов, он автоматически интегрируется в проект.
Поддерживаются следующие шаблоны:
-
definitions.ftl
: используется для определения макросов для плагина. -
head.ftl
: используется для добавления разметки в HTML-элемент<head>
-
body_top.ftl
: позволяет добавлять разметку в начало HTML-элемента<body>
-
body_bottom.ftl
: упрощает включение разметки в конце HTML-элемента<body>
Поместите шаблон/ы в папку {папка_вашего_плагина}/delivery/templates
в вашем плагине, как показано ниже:
{папка_вашего_плагина}/
cms-plugin.yaml
.dc/
screenshots/
default.png
delivery/
templates/
definitions.ftl
head.ftl
body_top.ftl
body_bottom.ftl\
Создание плагина
Для создания плагина вам понадобятся:
- файлы плагина
- файл дескриптора плагина
cms-plugin.yaml
Файлы вашего плагина могут включать в себя различные форматы, включая файлы JavaScript, XML, скрипты Groovy, изображения, файлы CSS и многое другое. Конкретные типы файлов зависят от типа разрабатываемого вами плагина.
Дескриптор плагина DC CMS
Файл cms-plugin.yaml
служит хранилищем необходимой информации о вашем плагине: лицензия, поддерживаемые версии DC CMS, а также дополнительные конфигурации и метаданные.
Образец файла дескриптора плагина:
# This file describes a plugin for use in DCCMS
# The version of the format for this file
descriptorVersion: 2
# Describe the plugin
plugin:
type: site
id: ru.dc.cms.plugin.test
name: Project Plugin Example
tags:
- test
version:
major: 3
minor: 0
patch: 1
description: A simple example for project plugins
documentation: "https://raw.githubusercontent.com/dccms/site-plugin-example/master/readme.md"
website:
name: Plugin Example
url: https://github.com/dccms/site-plugins-example
media:
screenshots:
- title: DCCMS
description: DCCMS Example Plugin
url: "https://raw.githubusercontent.com/dccms/site-plugin-example/master/.dc/screenshots/default.png"
developer:
company:
name: DCCMS
email: info@cms.com
url: https://cms.com
license:
name: MIT
url: https://opensource.org/licenses/MIT
dcCmsVersions:
- major: 4
minor: 0
patch: 0
dcCmsEditions:
- community
- enterprise
# Option auto-wiring section
# installation:
Вот некоторые моменты, которые следует отметить в файле дескриптора:
Поле | Обязательное/необязательное | Описание |
---|---|---|
descriptorVersion |
Обязательное | Версия формата для данного файла |
plugin.type |
Обязательное | Укажите значение site |
plugin.id |
Обязательное | Уникальный id, узнаваемый для людей, которые будут использовать плагин |
plugin.name |
Обязательное | Имя, отображаемое в DC CMS Marketplace. Выберите уникальное имя для вашего плагина. Также рекомендуется выбирать осмысленное или узнаваемое имя для вашего плагина. Имя может состоять из нескольких слов. |
plugin.version |
Обязательное | Номер версии плагина |
plugin.description |
Необязательное | Краткое описание плагина, которое отображается под названием плагина в DC CMS Marketplace |
plugin.documentation |
Необязательное | Служит блоком справки для плагина. Он содержит URL-адрес файла документации плагина (должен быть в Markdown), содержащий информацию о том, как использовать /настраивать плагин. Документация появится вместе с плагином в CMS Studio и CMS Marketplace. |
plugin.website.url |
Необязательное | Может быть страницей для получения дополнительной информации о вашем плагине или для объявления обновлений, сообщений об ошибках и т.д. из вашего сообщества пользователей. |
plugin.media.url |
Необязательное | Местоположение для поиска репрезентативного изображения для плагина. В случае отсутствия явного указания plugin.media.url , путь по умолчанию для поиска репрезентативного изображения для плагина - ../.cms/screenshots/default.png . |
plugin.license |
Необязательное | Лицензия, поддерживаемая плагином |
plugin.dcCmsVersions |
Обязательное | Содержит информацию о версии или версиях DC CMS, с которыми совместим данный плагин. Важно регулярно обновлять эту информацию. |
Для изображений, используемых в файле cms-plugin.yaml
,
рекомендуется использовать изображения с соотношением сторон 4:3 (ширина к высоте), например, изображения размером 1200x800.
Автоматическое подключение
DC CMS облегчает автоматическое подключение вашего плагина к соответствующему файлу конфигурации в CMS Studio при установке плагина.
Чтобы включить автоматическое подключение плагина к соответствующему файлу конфигурации в CMS Studio во время установки, добавьте следующий код в ваш файл дексриптора cms-plugin.yaml
:
installation:
- type: preview-app
parentXpath: //widget[@id='dccms.components.ToolsPanel']
elementXpath: //plugin[@id='ru.dc.cms.sampleComponentLibraryPlugin.components.reactComponent']
element:
name: configuration
children:
- name: widgets
children:
- name: widget
attributes:
- name: id
value: ru.dc.cms.sampleComponentLibraryPlugin.components.reactComponent
children:
- name: plugin
attributes:
- name: id
value: ru.dc.cms.plugin.sidebar
- name: type
value: sidebar
- name: name
value: react-sample
- name: file
value: index.modern.js
где:
installation.type
- тип плагина для автоматической установки в CMS Studio. Доступные значения: form-control, form-datasource, preview-app, site-filter и site-contextinstallation.parentXpath
- селектор XPath для элемента, в который будет добавлен плагин. Требуется, если тип установки - preview-app.installation.elementXpath
- селектор XPath для проверки, присутствует ли уже плагин в конфигурации. Также используется для удаления конфигурации при удалении плагина.installation.element.name
- имя элемента, которое должно быть указано в файле конфигурации вашего проекта, чтобы плагин отображался в DC Studio Доступные значения: control (для типа установки form-control), datasource (для типа установки form-datasource), а для типа установки preview-app - начало раздела, в который нужно вставить плагин, например, configuration и т.д.installation.element.children
содержит любое количество name и children элементов, описывающих ваш плагин, где:name
название того, что описывается, например, plugin или iconchildren
содержит любое количество name и value и может содержать класс (иконку), идентификатор плагина, тип плагина, имя плагина и файлы/папки плагина (местоположение плагина) и соответствующие им значения
Ниже приведены примеры того, как настроить автоматическое подключение различных типов плагинов в CMS Studio.
Пример подключения элемента управления формой:
installation:
- type: form-control
elementXpath: //control/plugin[pluginId='ru.dc.cms.plugin.control']
element:
name: control
children:
- name: plugin
children:
- name: pluginId
value: ru.dc.cms.plugin.control
- name: type
value: control
- name: name
value: text-input
- name: filename
value: main.js
- name: icon
children:
- name: class
value: fa-pencil-square-o
Пример подключения источника данных:
installation:
- type: form-datasource
elementXpath: //datasource/plugin[pluginId='ru.dc.cms.plugin.datasource']
element:
name: datasource
children:
- name: plugin
children:
- name: pluginId
value: ru.dc.cms.plugin.datasource
- name: type
value: datasource
- name: name
value: text-input
- name: filename
value: main.js
- name: icon
children:
- name: class
value: fa-pencil-square-o
Пример подключения preview-app:
installation:
- type: preview-app
parentXpath: //widget[@id='dccms.components.ToolsPanel']
elementXpath: //plugin[@id='ru.dc.cms.sampleComponentLibraryPlugin.components.reactComponent']
element:
name: configuration
children:
- name: widgets
children:
- name: widget
attributes:
- name: id
value: ru.dc.cms.sampleComponentLibraryPlugin.components.reactComponent
children:
- name: plugin
attributes:
- name: id
value: ru.dc.cms.plugin
- name: type
value: sidebar
- name: name
value: react-sample
- name: file
value: index.modern.js
Пример подключения фильтра сайта:
installation:
- type: site-filter
elementXpath: //filter/script[text()='/scripts/filters/plugins/ru/dccms/plugin/filter/myFilter.groovy']
element:
name: filter
children:
- name: script
value: '/scripts/filters/plugins/ru/dccms/plugin/filter/myFilter.groovy'
- name: mapping
children:
- name: include
value: '/**'
Пример подключения контекста сайта:
installation:
- type: site-context
elementXpath: //bean[@id='myBean']
element:
name: bean
attributes:
- name: id
value: myBean
- name: class
value: plugins.ru.dccms.plugin/context/MyClass
children:
- name: property
attributes:
- name: name
value: siteItemService
- name: ref
value: dc.siteItemService
Передача параметров проекту через плагины
Может потребоваться передавать некоторые параметры в проект, а не оставлять их внутри плагина, например, учетные данные AWS, учетные данные Box, учетные данные CommerceTools и т.д. DC CMS поддерживает передачу параметров в проекты из плагинов.
Для включения параметров, которые должны быть переданы проекту через плагин, вы можете обновить файл cms-plugin.yaml
, добавив в него следующее:
parameters:
- label: My Parameter Label
name: myParam
type: string
description: My parameter
required: true
где:
label
: метка, отображаемая для параметра в диалоговом окне создания проектаname
: имя параметра в нотации camelCasetype
: тип параметра (возможные значения:STRING
илиPASSWORD
. По умолчаниюSTRING
.description
: описание параметраrequired
: указывает, является ли параметр обязательным. По умолчаниюtrue
.
Для использования параметров в скриптах и файлах шаблонов, используйте pluginConfig
, например, pluginConfig.getString("PARAM_NAME")
, где PARAM_NAME - это имя параметра.
Структура директория
Плагин состоит из группы файлов, которые копируются в репозиторий проекта при установке. Чтобы создать свой собственный плагин, ваши файлы/папки должны быть помещены в папку плагина соответствующего типа, следуя приведенной ниже структуре:
cms-plugin.yaml
: дескриптор плагина.cms
screenshots
default.png
: репрезентативное изображение плагина по умолчанию, расположенное по пути.cms/screenshots/
authoring
: содержит все файлы, связанные с расширениями CMS Studiocontent-types
component
: содержит файлы конфигурации для компонентовpage
:содержит файлы конфигурации для страниц
static-assets
: содержит файлы для плагинов CMS Studioscripts
classes
: содержит классы Groovyrest
: содержит скрипты REST Groovy
delivery
: содержит все файлы, связанные с расширениями CMS Enginetemplates
: содержит шаблоны Freemarkerstatic-assets
: cодержит бинарные файлыscripts
classes
: содержит классы Groovycomponents
: содержит скрипты Groovy для компонентовcontrollers
: содержит контроллеры Groovyfilters
: содержит фильтры Groovypages
: содержит скрипты Groovy для страницыrest
: содержит скрипты Groovy REST
Один простой метод разработки новых плагинов заключается в том, чтобы начать с пустого проекта. После подготовки всех необходимых файлов скопируйте их в новый репозиторий, соблюдая установленную структуру. Важно, однако, убедиться в том, что все ссылки будут впоследствии обновлены, чтобы соответствовать окончательному местоположению каждого файла.
Расположение в репозитории плагина | Расположение в репозитории проекта |
---|---|
authoring/content-types/component/* |
/config/studio/content-types/component/<plugin id path>/* |
authoring/content-types/page/* |
/config/studio/content-types/page/<plugin id path>/* |
authoring/static-assets/* |
/config/studio/static-assets/plugins/<plugin id path>/* |
authoring/scripts/classes/* |
/config/studio/plugins/scripts/classes/<plugin id path>/* |
authoring/scripts/rest/* |
/config/studio/plugins/scripts/rest/<plugin id path>/* |
delivery/templates/* |
/templates/<plugin id path>/* |
delivery/static-assets/* |
/static-assets/<plugin id path>/* |
delivery/scripts/classes/* |
/scripts/classes/<plugin id path>/* |
delivery/scripts/components/* |
/scripts/components/<plugin id path>/* |
delivery/scripts/controllers/* |
/scripts/controllers/<plugin id path>/* |
delivery/scripts/filters/* |
/scripts/filters/<plugin id path>/* |
|`delivery/scripts/pages/*`|`/scripts/pages/<plugin id path>/*`|
|`delivery/scripts/rest/*`|`/scripts/rest/<plugin id path>/*`|
Ваш плагин устанавливается в проект через CMS Marketplace или с помощью команды copy-plugin
командной строки интерфейса. Дескриптор вашего плагина, содержащий структуру директория, будет прочитан, а соответствующие файлы плагина скопированы в проект.
Структура директория UI плагинов
Плагины редактирования должны использовать директорий со следующей структурой:{PLUGIN_DIRECTORY}/authoring/static-assets/{ID}/{CATEGORY}/{NAME}/
где:
ID
: директорий с названием, соответствующим идентификатору плагина (например,ru.dc.cms.sample
)CATEGORY
: директорий с названием, соответствующим типу плагина (например, control, datasource, sidebar, app, lib, и т.д.)NAME
: директорий с названием, соответствующим названию плагина- исходники плагина и/или выходные данные сборки плагина будут размещены здесь.
Пример структуры директория
Ниже расположен пример структуры директория для плагина, у которого в значении pluginId
установлено ru.dc.cms.sample
:
{your_plugin_folder}/
cms-plugin.yaml
.dc/
screenshots/
default.png
authoring/
static-assets/
plugins/
ru/
dccms/
sample/
controls/
color-picker/
main.js
style.css
delivery/
scripts/
rest/
ru/
dccms/
sample/
hello.groovy
templates/
ru/
dccms/
sample/
head.ftl
Создание собственного плагина
Чтобы создать плагин, у вас должен быть файл дескриптора с именем cms-plugin.yaml
.
Кроме того, создание плагина требует наличия конкретных файлов плагина. Характер этих файлов зависит от типа плагина, который вы разрабатываете, и может включать в себя файлы JavaScript, файлы шаблонов Freemarker, файлы Groovy, файлы XML и так далее. Затем эти файлы плагина должны быть организованы в структуре директория (как описывалось выше) в соответствии с конкретным типом создаваемого плагина. Например, если ваш плагин принадлежит к типу компонента, соответствующие файлы должны быть размещены по пути authoring/content-types/component
.
authoring/
content-types/
component/
<your_component_name>/
config.xml
controller.groovy
form-definition.xml
DC CMS использует путь по умолчанию для поиска дефолтового репрезентативного изображения плагина - url ../.cms/screenshots/
. Вот пример файлов/директория плагина с изображением по умолчанию для презентации плагина:
.cms/
screenshots/
default.png
authoring/
content-types/
component/
<your_component_name>/
config.xml
controller.groovy
form-definition.xml
Переиспользование библиотек на Java в вашем плагине
Некоторые пользователи могут иметь библиотеки, написанные на Java, которые они хотели бы повторно использовать в своем плагине. Чтобы повторно использовать эти библиотеки, выполните следующие действия:
-
Опубликуйте ваши JAR-файлы в Maven Central.
-
Загрузите JAR-файлы из Maven с помощью небольшого скрипта на Groovy в вашем плагине с использованием Grapes.
Если JAR доступен в Maven Central:
@Grab(value='com.example:my-java-plugin:1.0.0', initClass=false)
import com.example.java.Plugin // This class is made up, it can be anything
Если JAR находится в частном репозитории Maven:
@GrabResolver(name='my-repo', root='https://maven.example.com/')
@Grab(value='com.example:my-java-plugin:1.0.0', initClass=false)
import com.example.java.Plugin // This class is made up, it can be anything
Извлечение активов расширений
На более низком уровне API CMS Studio содержит эндпоинт “getPluginFile”, специально предназначенный для получения файлов, связанных с определенным плагином. Этот API упрощает процесс, автоматически настраивая соответствующие заголовки в зависимости от типа запрашиваемого актива, будь то JavaScript, CSS, изображение и так далее. Кроме того, разработчики имеют доступ к механизмам более высокого уровня, таким как Plugin host, для упрощения загрузки и использования плагинов.
Для ручной загрузки активов из вашего плагина следует использовать следующий URL:
/studio/1/plugin/file?siteId={siteId}&type={yourPluginType}&name={yourPluginName}&file={fileName}
Если ваше расширение вложено в директорий под определенным идентификатором плагина, необходимо включить аргумент pluginId
в URL:
/studio/1/plugin/file?siteId={siteId}&pluginId={yourPluginId}&type={yourPluginType}&name={yourPluginName}&file={fileName}
Установка плагина
Есть различные методы установки плагинов в зависимости от их расположения:
После установки плагина его местоположение будет определено типом созданного вами плагина:
{siteRoot}/config/studio/static-assets/plugins/{yourPluginId}/{yourPluginType}/{yourPluginName}/
{siteRoot}/config/studio/content-types/component/{yourPluginType}/{yourPluginName}/
{siteRoot}/config/studio/content-types/page/{yourPluginType}/{yourPluginName}/
{siteRoot}/templates/{yourPluginId}/{yourPluginType}/{yourPluginName}
{siteRoot}/static-assets/{yourPluginId}/{yourPluginType}/{yourPluginName}
{siteRoot}/scripts/{yourScriptType}/{yourPluginId}/{yourPluginType}/{yourPluginName}
Установка плагина из CMS Marketplace
Как только плагин опубликован в CMS Marketplace, его можно установить с помощью пользовательского интерфейса CMS Studio или REST API.
Чтобы получить доступ к инструменту управления плагинами или использовать REST API для установки плагина, пользователь должен иметь следующие разрешения: list_plugins
и install_plugins
.
Установка плагина в режиме разработки из локальной папки CMS Studio
Для разработчиков, желающих протестировать свои плагины перед отправкой в CMS Marketplace, DC CMS предоставляет команду CLI под названием copy-plugin
, упрощающую установку плагина из локальной папки CMS Studio в проект с использованием cms-cli
.
Давайте проиллюстрируем это на примере. Предположим, что у нас есть проект с именем "myeditorial", в котором мы хотим установить плагин, расположенный по пути /Users/myuser/plugins/sidebar-plugin
.
Чтобы установить sidebar-plugin
в проект "myeditorial", нужно выполнить команду copy-plugin
, как показано ниже:
./cms-cli copy-plugin -e local -s myeditorial --path /users/myuser/plugins/sidebar-plugin
Важно отметить, что соединение с DC CMS должно быть установлено с помощью команды add-environment
перед использованием любых команд cms-cli
.
Пример создания плагина
Рассмотрим пример создания плагина для типа контента “Компонент” с именем “My Component”.
Сначала мы настроим файл дескриптора cms-plugin.yaml
для нашего плагина:
# This file describes a plugin for use in DCCMS
# The version of the format for this file
descriptorVersion: 2
# Describe the plugin
plugin:
type: site
id: ru.dc.cms.plugin.mycomponent
name: My Component Plugin Example
tags:
- test
version:
major: 4
minor: 0
patch: 0
description: My simple component content type plugin
website:
name: Component Content Type Plugin Example
url: https://dccms.com
media:
screenshots:
- title: DCCMS
description: DCCMS Example Component Plugin
url: "https://raw.githubusercontent.com/dccms/site-plugin-example/master/.dc/screenshots/default.png"
developer:
company:
name: DCCMS
email: info@dccms.com
url: https://dccms.com
license:
name: MIT
url: https://opensource.org/licenses/MIT
dcCmsVersions:
- major: 4
minor: 0
patch: 0
dcCmsEditions:
- community
- enterprise
Затем создадим структуру директория для плагина для типа контента “Компонент” (authoring/content-types/component/*
), где будут размещены файлы плагина:
authoring/
content-types/
component/
mycomponent/
config.xml
controller.groovy
form-definition.xml
Ниже расположены файлы плагина.
Файл плагина authoring/content-types/component/mycomponent/config.xml:
<content-type name="/component/mycomponent" is-wcm-type="true">
<label>My Component</label>
<form>/component/plugins/ru/dccms/mycomponent/mycomponent</form>
<form-path>simple</form-path>
<model-instance-path>NOT-USED-BY-SIMPLE-FORM-ENGINE</model-instance-path>
<file-extension>xml</file-extension>
<content-as-folder>false</content-as-folder>
<previewable>false</previewable>
<quickCreate>false</quickCreate>
<quickCreatePath></quickCreatePath>
<noThumbnail>true</noThumbnail>
<image-thumbnail></image-thumbnail>
</content-type>
Файл плагина authoring/content-types/component/mycomponent/form-definition.xml:
<form>
<title>Test</title>
<description></description>
<objectType>component</objectType>
<content-type>/component/plugins/ru/dccms/plugin/mycomponent/mycomponent</content-type>
<imageThumbnail>undefined</imageThumbnail>
<quickCreate>false</quickCreate>
<quickCreatePath></quickCreatePath>
<properties> <property>
<name>display-template</name>
<label>Display Template</label>
<value>/templates/plugins/ru/dccms/plugin/mycomponent/mycomponent.ftl</value>
<type>template</type>
</property>
<property>
<name>no-template-required</name>
<label>No Template Required</label>
<value></value>
<type>boolean</type>
</property>
<property>
<name>merge-strategy</name>
<label>Merge Strategy</label>
<value>inherit-levels</value>
<type>string</type>
</property>
</properties>
<sections> <section>
<title>Test Properties</title>
<description></description>
<defaultOpen>true</defaultOpen>
<fields>
<field>
<type>auto-filename</type>
<id>file-name</id>
<iceId></iceId>
<title>Component ID</title>
<description></description>
<defaultValue></defaultValue>
<help></help>
<properties>
<property>
<name>size</name>
<value>50</value>
<type>int</type>
</property>
<property>
<name>maxlength</name>
<value>50</value>
<type>int</type>
</property>
<property>
<name>readonly</name>
<value></value>
<type>boolean</type>
</property>
</properties>
<constraints>
</constraints>
</field>
<field>
<type>input</type>
<id>internal-name</id>
<iceId></iceId>
<title>Internal Name</title>
<description></description>
<defaultValue></defaultValue>
<help></help>
<properties>
<property>
<name>size</name>
<value>50</value>
<type>int</type>
</property>
<property>
<name>maxlength</name>
<value>50</value>
<type>int</type>
</property>
</properties>
<constraints>
<constraint>
<name>required</name>
<value><![CDATA[true]]></value>
<type>boolean</type>
</constraint>
</constraints>
</field>
<field>
<type>input</type>
<id>someValue_s</id>
<iceId></iceId>
<title>Some Value</title>
<description></description>
<defaultValue></defaultValue>
<help></help>
<properties>
<property>
<name>size</name>
<value>50</value>
<type>int</type>
</property>
<property>
<name>maxlength</name>
<value>50</value>
<type>int</type>
</property>
<property>
<name>readonly</name>
<value></value>
<type>boolean</type>
</property>
<property>
<name>tokenize</name>
<value>false</value>
<type>boolean</type>
</property>
</properties>
<constraints>
<constraint>
<name>required</name>
<value><![CDATA[]]></value>
<type>boolean</type>
</constraint>
<constraint>
<name>pattern</name>
<value><![CDATA[]]></value>
<type>string</type>
</constraint>
</constraints>
</field>
</fields>
</section>
</sections>
<datasources> </datasources>
</form>
Файл плагина authoring/content-types/component/mycomponent/controller.groovy:
import scripts.libs.CommonLifecycleApi;
def contentLifecycleParams =[:];
contentLifecycleParams.site = site;
contentLifecycleParams.path = path;
contentLifecycleParams.user = user;
contentLifecycleParams.contentType = contentType;
contentLifecycleParams.contentLifecycleOperation = contentLifecycleOperation;
contentLifecycleParams.contentLoader = contentLoader;
contentLifecycleParams.applicationContext = applicationContext;
def controller = new CommonLifecycleApi(contentLifecycleParams);
controller.execute();
Теперь плагин готов к тестированию. Мы установим наш плагин, расположенный по пути /users/myuser/component-plugin
, используя cms-cli
команду copy-plugin
, чтобы протестировать плагин в проекте с именем “Editorial”:
./cms-cli copy-plugin -e local -s editorial --path /users/myuser/component-plugin
После установки наш плагин для компонента будет доступен по пути Инструменты сайта > Типы контента.