L'héritage des thèmes

Principe

Dans Dotclear, tous les thèmes héritent systématiquement du thème "default". Si un thème ne fournit pas des versions spécifiques des templates home.html, post.html, category.html, etc. , Dotclear 2 utilise les fichiers présents dans le thème "default" pour effectuer un rendu des pages.

Depuis la version 2.1 de Dotclear, on peut préciser quel est le parent d'un thème. Un thème est dit enfant quand il hérite d'un thème parent. Cela permet au thème enfant d'utiliser les fichiers templates du thème parent et évite ainsi de dupliquer tous les fichiers tpl.

Ce comportement est étendu aux fichiers PHP :

  1. Si le thème "enfant" fournit un fichier _public.php, ce dernier est chargé.
  2. Ensuite, si le thème "parent" fournit lui aussi un fichier _public.php, celui-ci est chargé à son tour.

Ceci permet d'utiliser de nouvelles balises de templates et de nouveaux gestionnaires d'URL dans le thème enfant.

Ordre de recherche d'un fichier template lors du rendu :

  1. Si le thème enfant dispose du fichier demandé, ce dernier sera utilisé.
  2. Sinon, si le thème parent dispose du fichier demandé, celui-ci servira au rendu.
  3. Sinon, Dotclear 2.1.x fera la recherche habituelle :
    1. d'abord dans le thème par défaut ("default"),
    2. puis dans les autres chemins possibles susceptibles d'avoir été ajoutés par des plugins.

Toute balise tpl (comme {{tpl:BlogThemeURL}}) pointera systématiquement vers l'URL du thème enfant, même si ce dernier n'apparait que dans un template fourni par le thème parent.

Limitations

  • Un thème ne peut hériter que d'un autre thème et un seul.
  • Un thème ne peut pas hériter d'un thème qui lui-même hérite d'un autre thème.

Mise en œuvre

Elle se fait dans le fichier _define.php du thème "enfant" :

$this->registerModule(
	/* Name */			"Mon superbe thème",
	/* Description*/		"Exemple d'un thème enfant basé sur Blue Silence",
	/* Author */			"Pep",
	/* Version */			'1.0',
	/* Properties */	array(
	/* Id du Parent */		'parent'		=> 'blueSilence',
	/* Configuration */		'standalone_config'	=> false,
	/* Type */			'type'			=> 'theme'
				)
);

Le thème "Mon superbe thème" est un enfant du thème "Blue Silence".

Important :

C'est l'identifiant du thème (le nom du dossier, ici blueSilence) qui est utilisé pour définir le thème parent et non son nom (Blue Silence).

(merci à Pep pour l'article original)

Wiki powered by Dokuwiki.