覆盖 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 模块的项目级版本会自动子类化原始版本,因此您可以覆盖个别内容而不必担心原始代码 - 它仍然 运行.
我想将 "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 模块的项目级版本会自动子类化原始版本,因此您可以覆盖个别内容而不必担心原始代码 - 它仍然 运行.