Silverstripe 3-扩展sitetree和布局

Silverstripe 3-扩展sitetree和布局,silverstripe,Silverstripe,我是银条乐队的新手。我需要通过扩展一个新类sitetree来创建一个新页面。我的问题是如何在模板中检索类似于$Layou的内容,它在classic page.php中使用。例如,在我的模板文件夹中,我希望有一个类似“Layout”的文件夹,用于从此文件夹创建的新页面 这是控制器: class WhitePage extends SiteTree { private static $db = array( ); private static $has_one = array

我是银条乐队的新手。我需要通过扩展一个新类sitetree来创建一个新页面。我的问题是如何在模板中检索类似于$Layou的内容,它在classic page.php中使用。例如,在我的模板文件夹中,我希望有一个类似“Layout”的文件夹,用于从此文件夹创建的新页面

这是控制器:

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,因为它可以处理数组,并且将使用第一个有效的数组。请看这里: