SilverStripe 3.6.3取消发布意外结果

SilverStripe 3.6.3取消发布意外结果,silverstripe,Silverstripe,我有一个关于3.6.3中取消发布页面的问题。如果我取消发布一个页面,它的所有子代也将取消发布,因此我必须在重新发布父页面时重新发布所有子代。我不记得过去在其他版本中发生过这种情况。如果这是一项功能,这不是很好,因为我无法再判断在取消发布父页面之前是否已取消发布某些子页面,因此,通过批量发布所有子页面,我可能会发布不应发布的页面。这是一个bug还是一个特性?我可以确认这在以前的版本中发生过(我早在3.3.2中就检查过)。值得一提的是,回顾源代码,这个“功能”似乎也存在于SilverStripe4.

我有一个关于3.6.3中取消发布页面的问题。如果我取消发布一个页面,它的所有子代也将取消发布,因此我必须在重新发布父页面时重新发布所有子代。我不记得过去在其他版本中发生过这种情况。如果这是一项功能,这不是很好,因为我无法再判断在取消发布父页面之前是否已取消发布某些子页面,因此,通过批量发布所有子页面,我可能会发布不应发布的页面。这是一个bug还是一个特性?

我可以确认这在以前的版本中发生过(我早在3.3.2中就检查过)。值得一提的是,回顾源代码,这个“功能”似乎也存在于SilverStripe4.x及更高版本中(例如)

这似乎是由
SiteTree
下的
exforce\u strict\u hierarchy
设置引起的。这显然默认为
true
,意味着无论何时删除页面(无论“阶段”,例如,live vs.draft),都会导致所有子页面也被删除

从技术上讲,当您取消发布页面时,它会将其从“实时”阶段删除。因为这是一次删除,所以它最终也会层叠到所有子页面。因此,最终的效果是,当您取消发布页面时,所有子页面似乎也已取消发布。这是一个奇怪的设置,在384页突然被取消发布后,我意外地发现了这个设置。特别是因为这也意味着您必须在取消发布(删除)当前页面下的所有内容这一意外功能之间进行选择,或者在数据库中可能存在大量孤立项

无论如何,要解决此问题,请将此添加到站点的
\u config.yml
文件:

SiteTree:
强制\u严格\u层次结构:false

好问题-您需要取消发布它还是只需要从菜单中隐藏它?取消发布子页面和父页面的示例是,如果一个页面意外取消发布,或者如果一组子页面尚未准备好发布,但处于各种竞争状态。很高兴能够取消发布父页面,并在完成后发布子页面,然后发布父页面以允许查看该部分。这不是一个隐藏菜单的情况,因为有一个隐藏机制。