删除字段作为撇号-cms模块中的选项参数

时间:2018-09-22 18:58:18

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

问题是,在某些情况下,我不想为用户提供“大小”选项,因为预告片可以嵌套在已经定义大小的其他模块中。因此,我想传递一个用于删除“ size”选项的参数。这不像我想的那样有效,但是我不知道这样是否有可能。

在这种情况下,我试图加入预告片:

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

这不可能吗?还是我有其他问题?

1 个答案:

答案 0 :(得分:1)

您不能在传递给removeFields的选项中使用apos.area,因为该窗口小部件的架构是在启动时为该类型的所有窗口小部件确定的。

但是,您可以extend模块teaser-widgets来制作一个simple-teaser-widgets模块,该模块确实使用removeFields来删除size字段。然后,您可以将所需的小部件类型放在每个区域中,而忽略其他区域。

实际上,{{1}的

index.js很简单:

simple-teaser-widgets