覆盖默认页面选项撇号

时间:2017-12-19 14:06:07

标签: apostrophe-cms

我想默认将“已发布”选项设为“false”,而不是“true”。

我尝试在撇号自定义页面中使用它:

但它不起作用! 你能帮忙吗?

由于

编辑:完整的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);
}
};

哈哈我喜欢这个网站,但是如果没有更多的评论,我就无法发布我的代码!好吧,我的问题很容易解释。

所以..我可以感谢撇号cms团队的出色工作^^和汤姆的耐心支持!

1 个答案:

答案 0 :(得分:0)

事实证明,新页面的发布状态是从其父页面继承的。这是在newChild的{​​{1}}方法中实现的。

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

或者,暂时取消发布您的主页,即使是顶级页面也会在未发布的情况下生成(显然在发布之后您又不想再这样做了。)

但如果这些方案都不能满足您的需求,您可以通过"超级模式扩展apostrophe-pages方法"做你想做的事:

newChild

我们会考虑一个pull请求来为// 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; }; } }; 模块实现unpublishNewChildPages之类的标记。然后,上面的代码可能是apostrophe-pages

的原始实现的一部分

仅供参考,您共享的代码似乎是整个模块的过分完整副本,如果您只是试图覆盖一件事情,您不需要将整个模块复制到项目级别(并且您不应该&#39 ; t,它让你对我们后来做出的任何改变负责。您的项目级核心Apostrophe模块版本会自动将原始版本作为子类,因此您可以覆盖单个内容而无需担心原始代码 - 它仍将运行。