覆盖 apostropheCMS 中的默认页面选项

Override defaults page option in apostropheCMS

我想将 "published" 选项设为默认 "false",而不是 "true"。

我试图在 postrophe-custom-pages 中使用它:

但是没有用! 你能帮个忙吗?

谢谢

编辑:完整的 index.js 也许我的默认选项在其他地方被覆盖了?

var _ = require('lodash');

module.exports = {

  extend: 'apostrophe-doc-type-manager',

  beforeConstruct: function(self, options) {

options.name = options.name || self.__meta.name.replace(/\-pages$/, '-page');

if (options.permissionsFields === undefined) {
  // By default, pages have nuanced permissions
  options.permissionsFields = true;
}

options.addFields = [
  {
    type: 'boolean',
    name: 'published',
    label: 'Published',
    def:false
  },
    {
      type: 'slug',
      name: 'slug',
      label: 'Slug',
      required: true,
      // with this flag, a leading / is enforced, and slashes
      // elsewhere are allowed etc.
      page: true
    },
    {
      type: 'select',
      name: 'type',
      label: 'Type',
      required: true,
      choices: _.map(options.apos.pages.typeChoices, function(type) {
        return {
          value: type.name,
          label: type.label
        };
      })
    },
    {
      type: 'boolean',
      name: 'orphan',
      label: 'Hide in Navigation'
    }
].concat(options.addFields || []);

options.arrangeFields = [
  {
    name: 'basics',
    label: 'Basics',
    fields: [ 'meta-description', 'title', 'slug', 'type','alaune', 'color', 'published', 'tags', 'orphan' ]
  }
].concat(options.arrangeFields || []);

},

construct: function(self, options) {
require('./lib/dispatch.js')(self, options);
require('./lib/api.js')(self, options);
}
};

哈哈,我喜欢这个网站,但我不能 post 我的代码没有更多评论!好吧,我的问题很容易解释。

所以 .. 我要感谢 apostrophe-cms 团队的出色工作 ^^ 和 Tom 的耐心支持!

事实证明,新页面的发布状态是从其父页面继承的。这是在apostrophe-pages.

newChild方法中实现的

老实说,这是一个非常有用的规则,所以您可能只想创建顶级页面,手动将它们设置为未发布,然后利用二级页面等的规则

或者,暂时取消发布您的主页,甚至顶级页面也将不发布(显然在发布后您不想再这样做了)。

但是如果这些场景都不能真正满足您的需求,您可以通过 "super pattern" 扩展 newChild 方法来执行您想要的操作:

// in lib/modules/apostrophe-pages/index.js of your own project.
// DO NOT modify it in node_modules, that is NEVER NECESSARY

module.exports = {
  construct: function(self, options) {
    var superNewChild = self.newChild;
    self.newChild = function(parentPage) {
      var child = superNewChild(parentPage);
      child.published = false;
      return child;
    };
  }
};

我们会考虑一个拉取请求来为 apostrophe-pages 模块实现一个像 unpublishNewChildPages 这样的标志。那么上面的代码可以是newChild.

的原始实现的一部分

仅供参考,您共享的代码似乎是整个模块的过度完整副本,如果您只是想覆盖一件事,则不需要将整个模块复制到项目级别(而且您不应该,它使您对我们以后所做的任何更改负责)。您的核心 Apostrophe 模块的项目级版本会自动子类化原始版本,因此您可以覆盖个别内容而不必担心原始代码 - 它仍然 运行.