使用SilverStripe 3.1我已经布局了一个FrontPage页面类型,它循环遍历其子节点以生成一个高大的滚动页面。它有各种不同的页面类型,我通过添加到Page类来动态创建控制器来访问它们的模板:
class Page extends SiteTree {
.....
function RenderAsChild($templateName = null) {
if(!$templateName) $templateName = $this->ClassName;
if(!$this->pageController){
$class = $this->ClassName . "_Controller";
$this->pageController = new $class($this);
}
return $this->pageController->renderForHolderPage($templateName);
}
并在控制器中:
class Page_Controller extends ContentController {
....
function renderForHolderPage($templateName = null) {
if(!$templateName) $templateName = $this->ClassName;
return $this->renderWith(array($templateName));
}
通过这种方式,我可以轻松地渲染页面并管理他们的模板和特殊功能,同时仍然可以在模板中以相同的方式处理它们,例如:
<% loop $Children %>
<% if $ClassName = 'FancyPage' %>
$RenderAsChild
......
问题是我想以这种方式使用userforms扩展,但是在循环或控件中的模板中它只显示为页面。它似乎对表单或UserDefinedForm对象一无所知。
有没有办法让userforms在模板中呈现为子项?
答案 0 :(得分:1)
快速而肮脏的测试,它似乎只在你有
时起作用$Form
在主题文件
中它不会替换$ UserDefinedForm,因为它没有使用index()来调用render,它具有必要的scrips来替换$ UserDefinedForm位,据我所知。