扩展数组模态编辑器

时间:2017-07-05 07:00:42

标签: apostrophe-cms

是否可以扩展数组模态对话框而不覆盖array-modal.js(撇号-schemas / public / js)?

我试图在全局模块中创建一个链接数组,为我创建的链接数组:

...
name: 'links',
label: 'Links',
type: 'array',
titleField: 'title',
schema: [{
  name: 'title',
  label: 'Title',
  type: 'string'
}, {
  name: 'url',
  label: 'Url',
  type: 'url'
}, {
  name: '_page',
  label: 'Page',
  type: 'joinByOne',
  withType: 'apostrophe-page',
  idField: 'pageId',
  filter: {
    projection: {
      title: 1,
      slug: 1
    }
  }
}]
...

现在我想设置标题字段并在页面为时禁用网址字段 选择。或者使用标题和网址字段。 如果我注册这样的脚本:

apos.define('apostrophe-array-editor-modal', {
  extend: 'apostrophe-modal',
  source: 'arrayEditor',
  ...
});

我覆盖了原始的array-modal.js,但我只想注册一个更改处理程序并在保存之前检查输入。

我的目标是管理员可以在全局部分编辑的(页脚/静态)链接列表,我可以在多个页面中使用它们。

谢谢!

1 个答案:

答案 0 :(得分:0)

我的建议是为每个链接创建某种type字段,编辑器可以在内部页面连接和外部URL之间进行选择。

select架构字段有一个showFields参数,可以根据所做的选择隐藏/显示架构表单的某些部分,请查看此处的文档http://apostrophecms.org/docs/tutorials/getting-started/schema-guide.html#code-select-code

您的代码看起来像

  name: 'links',
  label: 'Links',
  type: 'array',
  titleField: 'title',
  schema: [{
    name: 'title',
    label: 'Title',
    type: 'string'
  }, {
    name: 'linkType',
    type: 'select',
    label: 'Type',
    choices: [{
      label: 'External',
      value: 'external',
      showFields: ['url']
    }, {
      label: 'Internal',
      value: 'internal',
      showFields: ['_page']
    }]
  }, {
    name: 'url',
    label: 'Url',
    type: 'url'
  }, {
    name: '_page',
    label: 'Page',
    type: 'joinByOne',
    withType: 'apostrophe-page',
    idField: 'pageId',
    filter: {
      projection: {
        title: 1,
        slug: 1
      }
    }
  }]

在模板中,您始终可以检查linkType的值以进行标记决策。