我已经创建了一个持有者页面KochiHolder
,如下所示,并成功执行了数据库重建。我已将$allowed_children
的{{1}}设置为仅接受KochiHolder
或KochiPage
。
在CMS中,我无法在VirtualPage
页面下创建VirtualPage
。
为什么KochiHolder
无法正常工作?如何将$allowed_children
设为VirtualPage
KochiHolder
KochiHolder
答案 0 :(得分:1)
在对Silverstripe用于CMS中“添加页面”屏幕的CMSPageAddController
(更具体地说,doAdd
操作)进行了一些调试后,我相信我找到了问题的根本原因
所以似乎发生了以下错误:Page type "Page" not allowed as child of this parent page
(好吧,这是我在测试中得到的错误)
在SiteTree
类中,它有一个validate
函数,用于检查允许的子项是什么。其中一项检查是unrolling VirtualPage
to the page it is a virtual of。 (可能还有更多的东西 - 我需要做更多的调查)
好消息是你可以覆盖这个功能,但它不是很好。基本上,因为您的类扩展Page
扩展SiteTree
,如果您在validate
上指定了自己的Page
函数(同时VirtualPage
扩展Page
你可以覆盖这个功能。
在我的测试中,我使用了以下内容:
public function validate()
{
$result = parent::validate();
if ($this instanceof VirtualPage)
{
$newResult = new ValidationResult();
$items = $result->messageList();
foreach ($items as $key => $value)
{
if ($key != 'ALLOWED_CHILDREN')
{
$newResult->error($value, $key);
}
}
return $newResult;
}
return $result;
}
它并不完美,它会做出一些假设(例如假设messageList
但that isn't always the case中的所有项目都有错误代码。我没有用它做过大量的测试,但它确实可以用来重现你的特定场景。