Ad

How To Change Dynamically The Page Layout In Octobercms

- 1 answer

I would like to change the layout of a page dynamically in octobercms

it means that from the value of a session the layout of the page must change

I made this code but it does not work:


==
<?php

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

?>
==_

so how to do it ? thank you in advance

Ad

Answer

You would be able to accomplish this by hooking into the cms.page.beforeDisplay event: https://octobercms.com/docs/api/cms/page/beforedisplay

You will need to implement this in a custom plugin as all of the theme page / layout functions run too late in the cycle to have the effect you need. (see https://octobercms.com/docs/plugin/registration for more information on how to get started building a plugin).

You can use the following code as an example of how to achiev/octobercms.com/docs/plugin/registration for more information on how to get started building a plugin).

You can use the following code as an example of how to achieve what you are looking for:

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;
    });
}
Ad
source: stackoverflow.com
Ad