General developer forum

Custom theme layout

 
Picture of Conn Warwicker
Custom theme layout
Core developersParticularly helpful MoodlersPlugin developers

Hi,

 None of the in-built theme layouts (e.g. base, login, maintenance, etc...) have precisely what I want for my plugin pages, so I want to create my own layout.

I know I can do this in the theme itself, e.g. if I go into theme_boost I can append another layout in the config.php file, and create a new mustache template. However, I don't want to have to do this for every theme that people may be using.

Is there a way of defining the new layout, within my block plugin itself?


I thought I might be able to do something like, create a "/blocks/myblock/templates" directory, put the mustache template in there, and then instead of

using a core layout, e.g. 

$PAGE->set_pagelayout( 'base' ); reference my own, 

e.g. 
$PAGE->set_pagelayout( 'block_myblock/mytemplate' );

That doesn't work, but I'm not sure if I've just got the syntax wrong, or if it's not possible at all, and would require altering the themes themselves?

Thanks.


 
Average of ratings: -
Picture of Mark Sharp
Re: Custom theme layout
Core developersParticularly helpful MoodlersPlugin developers

So one possibility is to have multiple child themes:

Boost -> Template theme -> Customer theme

So the customer theme is a child of template theme, which is a child of Boost theme.

https://docs.moodle.org/dev/Creating_a_theme_based_on_boost

 
Average of ratings: -
Picture of Conn Warwicker
Re: Custom theme layout
Core developersParticularly helpful MoodlersPlugin developers

That seems like a lot of work, as I'd have to create new child themes for any theme people use and get them to install that as well, just to have a different page layout... mixed

I've been looking at the code behind it all and it seems like there is no way to create a new layout from anywhere other than a theme. I can't believe i'm the only one who's ever wanted to do it.. I could write the code to make it possible, but I don't know if it would be accepted into core or not.

 
Average of ratings: -
Picture of Jer Brand
Re: Custom theme layout
 

This is probably a silly suggestion, but: 

Could you find a layout that's extremely basic/empty and build up from there? If that didn't remove enough elements, it might be worth including a custom page layout, like $PAGE->set_pagelayout("my-plugin-layout"), even though it should ignore your invalid layout and default to base. You could then use the class for your plugin pages (pagelayout-my-plugin-layout) then remove elements you don't want with CSS.

It's not really answering the question (I don't see a way to register a one-off layout either), but do you think it might work in your situation?

 
Average of ratings: -
Gareth J Barnard
Re: Custom theme layout
Core developersParticularly helpful MoodlersPlugin developers

Pragmatically you can't define new layouts unless you're using a theme and even then that can cause issues.  What is wrong with the existing layouts that have no block areas and fill the page where the plugin can orchestrate the content area as it wishes?

 
Average of ratings: -