Используя SilverStripe 3.1, я выложил тип страницы FrontPage, который проходит через его дочерние элементы, чтобы создать большую страницу с прокруткой. В нем есть всевозможные типы страниц, и я обращаюсь к их шаблонам, создавая их контроллеры «на лету», добавляя к классу «Страница»:
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.
Есть ли способ получить пользовательские формы для рендеринга в качестве дочернего элемента в шаблоне?
Был быстрый и грязный тест, и, похоже, он работает только тогда, когда у вас есть
$Form
в файле темы
Это не заменит $ UserDefinedForm, поскольку он не вызывает рендеринг с индексом (), который имеет необходимые скрипты для замены бита $ UserDefinedForm, насколько я могу судить.