Theme changes in 2.0
Moodle 2.0
- PROJECT STATE: Proposal
- MAIN TRACKER ISSUE: n/a
- DISCUSSION AND COMMENTS: n/a
- AUTHOR: Petr Škoda (škoďák)
Goals
The main goals are:
- general simplification of code
- easier theme customizations
- allow themes to be stored in dataroot
- improved performance
- solve all caching problems
- base all themes on YUI CSS foundation
- easy customisation of theme images (similar to smartpix)
Design overview
All theme files will be served through two files /theme/styles.php and '/'theme/image.php. If more advanced themes need extra javascript files we could add optional /theme/javascript.php file.
All CSS style sheets (including YUI, plugin CSS and parents) would be merged into single large CSS file served via the /theme/styles.php file, it would have several parameters:
- theme - string, theme name
- rtl - bool, modified style sheet for RTL languages
- iehack - 6/7, IE would include special IE6/7 incompatibility fixes (this means IE 6 and 7 loads two styles.php instead of one)
- rev - int, theme revision number stored in main config table, solves all caching problems
The theme config.php would be significantly simplified, the complete list of available options would be:
$THEME->parents = array('standard', 'purple');
lists all parents top-down, each theme contains full list of parents, this is non-recursive and more flexible specification without any limits$THEME->sheets = array('styles_layout', 'styles_fonts', 'styles_color');
the same as before, lists files from current theme directory$THEME->parents_exclude_sheets('standard'=>array('styles_moz'), 'purple'=>array('styles_fonts.css'));
it would be also posssible to use true instead of array in order to specify all sheets or all sheets in all parents$THEME->plugins_exclude_sheets('mod_book', 'gradereport_grader');
- specify individual components that should be excluded from this theme$THEME->layouts = array(...);
- the same as before, cascades through parent themes- resource and filter hacks $THEME->resource_mp3player_colors, $THEME->filter_mediaplugin_colors
Implementation
Backwards compatibility
Limited, the themes would have to be updated to have new options in config.php. Obsoleted themes can be detected by searching for /theme/oldtheme/styles.php, this file will not be present in new themes any more. Moodle core would simply use parent them if already updated or standard theme.
Upgrade steps:
- delete styles.php
- redefine all config.php options - in majority of cases change parent value to parents array
- rename styles_ie6.css and styles_ie7.css to styles_layout_ie6.css and styles_layout_ie7.css - each normal sheet may have an extra sheet with _ieX suffix now, these are loaded automatically, excluding is applied based on $THEME->parents_exclude_sheets() info from the current theme
- rename rtl.css to styles_layout_rtl.css - again each normal style sheet may have extra sheet with _rtl suffix similar to IE hacks sheets
- delete header.html, footer.html and meta.php - obsoleted by $THEME->layouts option and new layout files
Removed old features
- meta.php - used mostly for IE6/7 hacks, custom layouts may be used instead
- smartpix - completely obsoleted by new image location resolution algorithm
- $CFG->themewww, $CFG->themedir and friends - themes can be stored in dataroot, web hosting companies could use shared dirroot without custom themes, the styles.php URLs would be always constructed via some helper functions
- styles.php replaced by styles.css, supported in all plugin types - the PHP is not needed because images are specified using {{component|dir/image}} syntax