SilverStripe PHP覆盖$ Layout变量

时间:2011-05-20 10:38:17

标签: php silverstripe

嘿......我怎么能覆盖$ Layout变量。我想添加一些逻辑,所以如果用户登录它显示内容X,如果不是内容Y.我尝试在Page.php中定义布局功能,但它不起作用。 THX。

1 个答案:

答案 0 :(得分:2)

我认为你真的不想覆盖$ Layout函数...这用于包含页面类型的适当模板。如果你有一个类名为NewsPage的页面类型,那么SilverStripe将在templates / Includes目录中检查NewsPage.ss文件。如果那不存在那么它将使用该目录中的Page.ss文件以及templates目录的根目录中的Page.ss(具有$ Layout变量)。请参阅SilverStripe Templates

如果您想要显示不同的内容,那么一种方法是覆盖Content变量。您可以通过覆盖index()函数来完成此操作(将其添加到您的控制器):

function index($request) {
    if( Member::currentUserID() ) {
        return array(                    
            'Content' => '<p>My custom content</p>'
        );
    } else {
        return array();
    }
}

另一种方法是在模板本身中这样做:

<% if CurrentMember %>
    <p>Logged in</p>
<% else %>
    <p>No logged in</p>
<% end_if %>