如何在octobercms中动态更改页面布局

时间:2018-11-20 14:53:35

标签: octobercms

我想在十月厘米中动态更改页面的布局

这意味着必须根据会话的值更改页面的布局

我编写了此代码,但是它不起作用:


==
<?php

function onInit()
{
   $this.layout.id = default;
}

?>
==_

那怎么办呢? 预先谢谢你

1 个答案:

答案 0 :(得分:1)

您可以通过加入cms.page.beforeDisplay事件来完成此操作:https://octobercms.com/docs/api/cms/page/beforedisplay

您将需要在自定义插件中实现此功能,因为所有主题页面/布局功能在周期中都运行得太晚而无法获得所需的效果。 (有关如何开始构建插件的更多信息,请参见https://octobercms.com/docs/plugin/registration

您可以使用以下代码作为实现所需内容的示例:

public function boot()
{
    \Event::listen('cms.page.beforeDisplay', function ($controller, $url, $page) {
        if (!$page || $url === '404') {
            return $page;
        }

        // Assign the page's layout with your selected layout
        $page->layout = \Cms\Classes\Layout::loadCached(\Cms\Classes\Theme::getActiveTheme(), 'your-layout-here');

        return $page;
    });
}