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

how to change dynamically the page layout in octobercms

我想在 octobercms

中动态更改页面布局

这意味着从一个会话的值开始,页面的布局必须改变

我编写了这段代码,但它不起作用:


==
<?php

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

?>
==_

那么怎么做呢? 提前谢谢你

您可以通过连接到 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;
    });
}