目前我正在使用带有Director规则的自定义Silverstripe控制器:
---
Name: myroutes
After: framework/routes#coreroutes
---
Director:
rules:
'category/$Action/$Slug': 'Category_Controller'
控制器看起来像这样:
class Category_Controller extends Page_Controller {
public function show($arguments) {
echo "Slug: " . $arguments->param("Slug");
}
}
当我在浏览器中打开网址http://mysite.com/category/show/mobile时 然后输出看起来很好:“Slug:mobile”。
我只是想知道如何使用文件夹“themes / templates / Layout”中的Category.ss模板来渲染输出。然后当然也应该包含来自Page.ss的容器html(带页眉/页脚)。与往常一样,在布局文件夹中有自定义页面控制器/类和相应的模板。
我刚试过这个:
public function show($arguments) {
echo $this->renderWith("Category");
}
它使用Category.ss来渲染输出,但是没有容器html ...
感谢任何帮助。 问候, 弗洛里安
答案 0 :(得分:3)
您也可以将数组传递给renderWith()
,它会尝试通过数组,直到找到模板。
所以我们说$this->renderWith(array('Category', 'Page'));
它将首先查找名为Category.ss
的模板,但找不到它(在模板文件夹中,而不是布局文件夹中),然后它会找到Page.ss
并使用它。
现在它在$Layout
内点击Page.ss
并在Layout文件夹中再次检查数组,它现在会找到Category.ss
,如果我的问题正确的话,这正是你在寻找的地方
如果您不想return $this->renderWith();
,您也可以return $this;
,而silverstripe将获得您调用的操作和$ this的类层次结构,并将其用作{{1}的数组}
因此,如果您的类为renderWith()
,则数组将如下所示:
Category_Controller > Page_Controller > ContentController
(如果它还包含Page_show和ContentController_show,我不是100%确定。)