Silverstripe 3-扩展sitetree和布局
我是银条乐队的新手。我需要通过扩展一个新类sitetree来创建一个新页面。我的问题是如何在模板中检索类似于$Layou的内容,它在classic page.php中使用。例如,在我的模板文件夹中,我希望有一个类似“Layout”的文件夹,用于从此文件夹创建的新页面 这是控制器:Silverstripe 3-扩展sitetree和布局,silverstripe,Silverstripe,我是银条乐队的新手。我需要通过扩展一个新类sitetree来创建一个新页面。我的问题是如何在模板中检索类似于$Layou的内容,它在classic page.php中使用。例如,在我的模板文件夹中,我希望有一个类似“Layout”的文件夹,用于从此文件夹创建的新页面 这是控制器: class WhitePage extends SiteTree { private static $db = array( ); private static $has_one = array
class WhitePage extends SiteTree {
private static $db = array(
);
private static $has_one = array(
);
}
class WhitePage_Controller extends ContentController {
private static $allowed_actions = array(
);
public function init() {
parent::init();
}
function index() {
return $this->renderWith("WhitePage");
}
}
我想在模板目录中在“.ss”文件中创建一个文件夹名“whitepage”,并在模板中使用类似$whitepage instate of$Layout的内容
如何做到这一点
嗯,很多
Francesco通过扩展WhitePage
类,您可以将master WhitePage.ss模板用于多种页面类型。然后,您可以像往常一样使用$Layout
调用自定义布局模板
白页
类白页扩展SiteTree{
}
类WhitePage\u控制器扩展ContentController{
私有静态$allowed_actions=数组(
);
公共函数init(){
父::init();
}
}
CustomWhitePage
类CustomWhitePage扩展了WhitePage{
}
类CustomWhitePage\u控制器扩展了WhitePage\u控制器{
私有静态$allowed_actions=数组(
);
公共函数init(){
父::init();
}
}
在themes/mytheme文件夹或mysite文件夹中创建模板,如下所示:
templates/Page.ss
templates/WhitePage.ss
templates/Layout/Page.ss
templates/Layout/WhitePage.ss
templates/Layout/CustomWhitePage.ss
您的Layout/WhitePage.ss
和Layout/CustomWhitePage.ss
将使用templates/WhitePage.ss
父模板,而扩展page
的任何页面将使用templates/page.ss
确保调用
?flush=all
,以便第一次通过加载模板。据我所知,您无法轻松覆盖$Layout
。除了尝试以不同的方式组织模板文件夹外,为什么要这样做?我工作过的每个站点,自定义页面模板都像往常一样存储在mysite/templates/Layout
文件夹中,任何添加新页面模板的模块都存储在{my module name}/templates/Layout
中。我的目的是创建一个不会呈现基本页面的新页面,在这种情况下,我需要一个不包含page.ss(在themes/myteme/templates/page.ss中)元素的withe页面,您可以将您的WhitePage.ss放在themes/myteme/templates中,它将被用来代替page.ss。这里有关于Silverstripe模板引擎的更多信息:这是我做的,但我对更复杂和可重用的东西感兴趣。因为如果我需要为新的扩展页面重用whitepage,我会这样做……您可以使用renderWith,因为它可以处理数组,并且将使用第一个有效的数组。请看这里: