0

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

4

1 回答 1

2

我不认为你真的想重写 $Layout 函数......这用于包含页面类型的适当模板。例如,如果你有一个类名为 NewsPage 的页面类型,那么 SilverStripe 会检查模板内部/包括 NewsPage.ss 文件的目录。如果不存在,那么它将使用该目录中的 Page.ss 文件以及模板目录(具有 $Layout 变量)根目录中的 Page.ss 参见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 %>
于 2011-05-22T01:32:22.107 回答