在一页上使用Silverstripe多个用户表单

sti*_*ire 5 silverstripe

我正在尝试创建一个页面,该页面将在选项卡式视图中显示多个用户窗体。例如基本联系方式,索取报价单等。

我以为可以创建新的页面类型并遍历子级以显示表单,但是$ Form变量无法呈现表单。

<% loop $Children %>
   <div>
     <h2>$Title</h2>
     $Form
   </div>
<% end_loop %>
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么吗,还是有其他方法可以在模板文件中使用其ID来呈现表单?

csy*_*_io 4

你可以尝试以下方法。

在页面持有者控制器中创建一个函数,以从特定子页面(必须是 UserDefinedForm 页面)获取表单。为此,您需要创建该子页面的控制器。

public function ChildForm($pageID) {
  $page = UserDefinedForm::get()->byID($pageID);
  $controller = UserDefinedForm_Controller::create($page);
  return $controller->Form();
}
Run Code Online (Sandbox Code Playgroud)

之后,您将在循环中调用此函数并将当前子 ID 传递给它

<% loop $Children %>
   <div>
     <h2>$Title</h2>
     $Top.ChildForm($ID)
   </div>
<% end_loop %>
Run Code Online (Sandbox Code Playgroud)

这应该(代码未经测试)返回您想要的表单。