Parmi les nouveautés qui seront introduites lors de la sortie de Dotclear 2.1 figure une première ébauche d'un système d'héritage entre thèmes.
Pour l'instant, la présentation de cette fonctionnalité a été plutôt sommaire :
Un thème va pouvoir hériter des templates et des éventuelles balises supplémentaires d'un autre. Si vous avez besoin de dériver un thème pour n'en changer que le style, vous pourrez maintenant le faire sans avoir à recopier tous les templates du premier.
Maintenant que nous ne sommes plus qu'à une grosse semaine de la sortie de la nouvelle version de Dotclear, il me semble bon de prendre un peu de temps pour revenir sur le sujet.
Au moins en attendant que le commando pédagogique
de Dotclear nous
ponde une documentation digne de ce nom... ;-)
Posons d'abord le décor
Que nous ne nous mèprenions pas : l'idée de thèmes hérités n'est pas nouvelle et encore moins révolutionnaire.
De fait, il s'agit simplement de décliner un nouveau thème depuis un thème existant, sans avoir à tout réécrire ou copier, surtout en matière de templates et de comportements. Pour la suite de ce billet, nous établirons les termes suivants :
- Le thème
enfant
: il s'agit de notre nouveau thème, qui reposera sur une grosse part d'existant fournie par un autre thème. - Le thème
parent
: c'est ce fameux thème qui nous fournit déjà une base solide que nous nous contenterons de compléter et/ou de spécialiser dans notre nouveau thèmeenfant
.
Si vous avez déjà créé des thèmes pour Dotclear 2, vous devez déjà comprendre pourquoi l'idée des thèmes hérités n'est pas nouvelle.
Non ? Allons... Relisez bien les deux petites définitions.
Et oui : en standard, un thème Dotclear 2 hérite systématiquement du
thème default
. Rappelez-vous que si votre thème ne fournit pas des
versions spécifiques des templates home.html,
post.html, category.html, etc. , Dotclear 2 utilisera
alors les versions de ces fichiers présentes dans le thème default
pour
effectuer un rendu des pages.
En résumé : actuellement, tout thème personnalisé est déjà un thème
enfant
du thème par défaut de Dotclear 2.
La nouveauté dans Dotclear 2.1 tient qu'il sera désormais possible de
préciser explicitement et librement cette
relation parent
/enfant
. Vous pourrez alors dire que votre nouveau
thème B
hérite du thème A
, plutôt que du thème
default
.
Comment les choses s'emboitent
Ou, plus exactement, comment elles s'enchainent.
Séquence de chargement du thème B
- Si le thème
A
fournit un fichier_public.php, ce dernier est chargé. - Ensuite, si le thème
B
fournit lui aussi un fichier_public.php, celui-ci est chargé à son tour.
Ainsi, si :
- de nouvelles balises de templates,
- de nouveaux gestionnaires d'URL
ont été définis et sont utilisés dans le thème A
, ils seront
également directement disponibles dans le thème B
.
Ordre de recherche d'un fichier template lors du rendu
- Si B dispose du fichier demandé, ce dernier sera utilisé.
- Sinon, si A dispose du fichier demandé, celui de A servira au rendu.
- Sinon, Dotclear 2.1.x fera la recherche habituelle :
- d'abord dans le thème par défaut (
default
), - puis dans les autres chemins possibles susceptibles d'avoir été ajoutés par des plugins.
- d'abord dans le thème par défaut (
Autres fichiers de thème (CSS, Javascript, images ...)
A l'heure actuelle, aucune notion d'héritage n'est disponible à ce niveau. En tout cas, pas en standard.
Ce qui signifie que tout marqueur {{tpl:BlogThemeURL}} pointera
systématiquement vers l'URL de B
, même si ce dernier n'apparait que dans
un template fourni par A
.
Limitation à un - et un seul - niveau d'héritage
Autant vous avertir tout de suite : le système d'héritage des thèmes est volontairement bridé à un seul niveau et un seul lien de parenté.
Sachez donc que :
- Un thème ne peut hériter que d'un autre thème et un seul[1].
- Un thème ne peut pas hériter d'un thème qui lui-même hérite d'un autre thème[2].
Comment ça s'utilise
J'imagine - j'espère - que c'est la dernière question que vous vous posez. :-)
Déclarer explicitement un thème B
comme enfant
d'un thème
A
est très simple. Il faudra simplement bien se mettre en tête que la
relation entre deux thèmes s'expriment en utilisant les identifiants internes
(en gros les noms des dossiers), et non leurs noms communs (aka les
libellés).
Tout se passe alors 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',
/* Id du Parent */ 'blueSilence'
);
Commentaires
#1
julien
jeudi 23 octobre 2008, 22:09
Si j'ai bien compris le truc, le n'est pas totalement vrai. En effet, tous les thèmes héritent également de default, non ? ;-)
(Oui, je pinaille...)
#2
Pep
jeudi 23 octobre 2008, 22:42
Oui et non.
Aucun comportement n'est hérité de : le dossier
tpl/de reste simplement toujours dans la pile de recherche d'un fichier template (c'est surtout une histoire de compatibilité).Mais on peut continuer de pinailler encore longtemps. :-p
#3
mirovinben
vendredi 24 octobre 2008, 08:33
J'ai commencé à tester hier... C'est pile-poil ce qu'il me fallait pour simplifier mon système de déclinaison de thèmes à partir d'un même thème. Ce qui me manque encore...
Mais, déjà comme ça c'est un vrai bonheur.