Удалить поля как параметр в модуле apostrophe-cms - PullRequest
0 голосов
/ 22 сентября 2018

Я сейчас пытаюсь заставить мои модули работать должным образом.Расширение модулей путем добавления полей прекрасно работает.Я использую несколько модулей (например, «тизер»), которые расширяют «контейнер», который определяет основные параметры, такие как размер.

Это мой контейнер, определяющий параметр «размер»:

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': {} } }) }}

Проблема в том, что в некоторых случаях я не хочу давать пользователю опцию "size", потому что тизер может быть вложен в какой-то другой модуль, который уже определяет размер.Поэтому я хочу передать аргумент для удаления опции «размер».Это не работает, как я думал, но я не знаю, возможно ли это вообще так.

Я попытался включить в этом случае тизер:

{{ apos.area(data.widget, 'contentBlock', { widgets: {
    'teaser': {
      removeFields: ['size']
    }
 } }) }}

Isэто невозможно или я что-то не так понял?

1 Ответ

0 голосов
/ 28 сентября 2018

Вы не можете использовать removeFields в параметрах, переданных apos.area, поскольку схема виджета определяется во время запуска для всех виджетов этого типа.

Однако вы можете extend вашМодуль teaser-widgets для создания модуля simple-teaser-widgets, который использует removeFields для удаления поля size.Затем вы можете поместить нужный тип виджета в каждую область и пропустить другой.

index.js для simple-teaser-widgets действительно очень просто:

module.exports = {
  extend: 'teaser-widgets',
  label: 'Simple Teaser'
};
...