撇号:将自定义全局设置拉入 beforeConstruct for piece 模块(博客)

Apostrophe: Pulling in custom global settings into beforeConstruct for piece module (blog)

我正在尝试引入我在具有数组字段类型的适当区域中创建的自定义全局设置。

我想将全局设置拉入博客模块以构建一个字段以添加到博客类型。我尝试使用撇号模型层和 mongo 数据库集合,如教程文档中所述,但看起来那些需要一些 req 交互或 self.method 才能正确触发,我不知道t think 在 beforeConstruct 函数中可用。

// This would ideally be a data.global.arrayField
var optionArraySet = ['Item 1', 'Item 2', 'Item 3'];
var formattedArraySet = [];
for (var type in optionArraySet) {
  formattedArraySet.push({
    label: optionArraySet[type],
    value: optionArraySet[type]
  })
}
options.addFields = [
  {
    label: 'Custom Array Field',
    name: 'customArrayField',
    type: 'select',
    choices: formattedArraySet
  }
].concat(options.addFields || [])

所以 optionArraySet 理想情况下是包含我要访问的数据数组的全局设置。

对于上下文,此全局设置将应用于几个不同的区域,如果我们想更改值,则不必在后端更新代码,我可以将新值添加到数组中全局设置并让前端页面更新其显示和设置字段更新相应的部分。

如果这有帮助,我基本上是在尝试控制内容编辑器可以在特定作品类型上选择的标签,以便他们无法输入不需要的标签。

construct: function(self, options) {
 self.beforeSave = function(req, piece, options, callback) {
  var newTags = [];

  newTags.push(piece.anotherFieldValue);

  var customArrayField = piece.customArrayField;

  for (var option in customArrayField) {
    newTags.push(customArrayField[option]);
  }

  piece.tags = newTags;
  return callback();
 };
}

谢谢

由于可以随时编辑全局设置,并且 beforeConstruct 仅在站点启动时执行,因此在那里读取全局设置并不是很有用。

有多种方法可以在运行时修补模式,但有一个更简单的解决方案:

  1. 创建一个新的片段类型模块,"special-tags"。将 name 设置为 special-tag.

  2. 使用名为 _specialTagsjoinByArray 架构字段加入 withType: 'special-tag'

现在,用户在编辑架构中包含此连接的文档时,只能从特殊标签列表中进行选择,管理员可以像编辑任何其他片段类型一样,通过管理栏编辑特殊标签。连接随文档一起加载,因此您可以访问 ._specialTags 并查找具有包含标签名称的 title 属性的文档数组。

有关joinByArray的更多信息,请参阅:

http://apostrophecms.org/docs/tutorials/getting-started/schema-guide.html#code-join-by-array-code

以及一般的架构指南。