SilverStripe PHP 重写 $Layout 变量

发布于 2024-11-08 04:32:57 字数 99 浏览 0 评论 0原文

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

Hey... how can I override $Layout variable. I would like to add some logic so if a user is logged in it shows content X if not content Y. I tried defining Layout function inside Page.php but it does not work. Thx.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

回心转意 2024-11-15 04:32:57

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

如果您想显示不同的内容,那么一种方法是覆盖 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 %>

I don't think you really want to override the $Layout function... this is used to include an appropriate template for the page type.e.g. if you had a page type with a class name of NewsPage then SilverStripe would check inside the templates/Includes directory for a NewsPage.ss file. If that didn't exist then it would use the Page.ss file in that directory along with the Page.ss in the root of the templates directory (which has the $Layout variable) See SilverStripe Templates.

If you're wanting to show different content then one way would be to override the Content variable. You could do this by overriding the index() function like so (add this to your controller):

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

Another way would be to do this in the template itself like this:

<% if CurrentMember %>
    <p>Logged in</p>
<% else %>
    <p>No logged in</p>
<% end_if %>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文