Удалить поля как параметр в модуле apostrophe-cms
В настоящее время я пытаюсь заставить мои модули работать должным образом. Расширение модулей путем добавления полей прекрасно работает. Я использую несколько модулей (например, "тизер"), которые расширяют "контейнер", который определяет основные параметры, такие как размер.
Это мой контейнер, определяющий параметр "размер":
module.exports = {
extend: 'apostrophe-widgets',
label: 'Container',
contextualOnly: true,
addFields: [{
name: 'contentBlock',
type: 'area',
label: 'Content Block',
}],
beforeConstruct: function(self, options) {
options.addFields = [{
name: 'size',
label: 'Modulbreite',
type: 'select',
choices: [{
label: 'Content width',
value: 'content-width'
},
{
label: 'Full width',
value: 'full-width'
}
],
required: true
}].concat(options.addFields || []);
}
};
А это мой тизер, расширяющий контейнер:
module.exports = {
extend: 'container-widgets',
label: 'Teaser',
contextualOnly: false,
addFields: [
{
name: 'teasertext',
label: 'Text',
type: 'string',
textarea: true
},
{
name: 'teaserurl',
label: 'Link',
type: 'string',
required: true
},
{
name: 'image',
label: 'Teaser Image',
type: 'singleton',
widgetType: 'apostrophe-images',
options: {
limit: 1
},
required: true
}
]
};
Затем я включаю контейнер в разметку страницы:
{{ apos.area(data.page, 'body', { widgets: { 'container': {} } }) }}
И тизер в разметке контейнера:
{{ apos.area(data.widget, 'contentBlock', { widgets: { 'teaser': {} } }) }}
Проблема в том, что в некоторых случаях я не хочу давать пользователю опцию "размер", потому что тизер может быть вложен в какой-то другой модуль, который уже определяет размер. Поэтому я хочу передать аргумент для удаления опции "размер". Это не работает, как я думал, но я не знаю, возможно ли это вообще так.
Я попытался включить тизер в этом случае, как это:
{{ apos.area(data.widget, 'contentBlock', { widgets: {
'teaser': {
removeFields: ['size']
}
} }) }}
Это невозможно или я что-то не так понял?
1 ответ
Вы не можете использовать removeFields
в опциях, переданных apos.area
потому что схема виджета определяется во время запуска, для всех виджетов этого типа.
Тем не менее, вы можете extend
ваш teaser-widgets
модуль, чтобы сделать simple-teaser-widgets
модуль, который использует removeFields
удалить size
поле. Затем вы можете поместить виджет, который вы хотите, в каждой области и пропустить другой.
index.js
за simple-teaser-widgets
действительно очень просто:
module.exports = {
extend: 'teaser-widgets',
label: 'Simple Teaser'
};