====== Themes inheritance ====== ===== Principle ===== In Dotclear, themes inherit from one of 3 templates sets : mustek (used by default if the theme does not specify which set it inherits from), currywurst or dotty. If a theme does not provide specific versions of template files like ''home.html'', ''post.html'', ''category.html'' or others, Dotclear 2 will use the files available in the template set to render the pages. Since Dotclear 2.1, you can specify what theme is the parent of another theme. A theme will be called //child// when it //inherits// from a //parent// theme. The child theme can use the template files from the parent theme, thus avoiding to duplicate all the tpl files. This behavior is extended to PHP files: - If the "child" theme includes a ''_public.php'' file, this one will be loaded. - Then, if the "parent" theme also includes a ''_public.php'' file, this file will be loaded as well. This will allow you to use new [[..:tpl|template tags]] and new URL managers in the child theme. Search order of a template file when rendering: - If the child theme has the required file, this file will be used. - Else, if the parent theme has the requested file, this one will be used. - If none of the above, Dotclear 2.x will do the usual search: - first in the templates set, - then in all other paths that might have been added by plug-ins. Every tpl tag (like {{tpl:BlogThemeURL}}) will point to the child theme URL, even if it only appears in a template provided by the parent theme. ===== Limitations ===== * A theme can only inherit one other theme. * A theme cannot inherit a theme which already inherits another theme itself. ===== Set up ===== Everything is done in the ''_define.php'' file of the child theme: $this->registerModule( /* Name */ "My amazing theme", /* Description*/ "Example theme based on Blue Silence", /* Author */ "Pep", /* Version */ '1.0', /* Parent ID */ 'blueSilence' ); The "My amazing theme" theme is a child of the "Blue Silence" theme. To define the parent theme, use the theme ID (its directory name, e.g. ''blueSilence''), not its name (//Blue Silence//).