Un thème n’est pas un squelette
Il est important de comprendre avant toute chose qu’un thème doit se limiter à la décoration visuelle, à l’habillage graphique. Un thème ne peut pas et ne doit pas se mêler de quel type d’information est affiché, de comment les informations sont sélectionnées etc ... Autrement dit :
- un thème ne doit pas surcharger des éléments du squelette autre que ceux explicitement définis dans cette documentation.
- un thème ne doit pas fournir de contenu autre que celui spécifié ci-dessous. Écrire un thème qui ne suivrait pas cette règle le limiterait à fonctionner avec un squelette donné, ou dans un cas donné, alors que le but est ici de proposer une méthode qui permette d’écrire des thèmes interchangeables avec plusieurs squelettes.
Organisation des fichiers
Le thème est constitué d’un répertoire. Tous les fichiers y sont au premier niveau, sauf les images de décoration qui seront dans un sous dossier img/
Les feuilles de style
Le thème doit comprendre une feuille de style habillage.css
qui sera incluse dans les pages par le squelette et sera appelée pour le media screen. Le thème peut comprendre une feuille de style impression.css
qui sera incluse dans les pages par le squelette et sera appelée pour le media print. Si le thème nécessite l’ajout de composants dynamiques dans le head , il peut fournir au choix :
-
inc-theme-head.html
qui sera incluse au même niveau quehabillage.css
, et reçoit les variables d’environnement (bien indiqué pour une CSS dynamique) -
inc-insert-head.html
qui sera ajoutée à la fin de la balise#INSERT_HEAD
, mais ne reçoit pas les variables d’environnement. Cette inclusion est plutôt indiquée pour les scripts qui utilisent jQuery ou un composant javascript fourni par un plugin. Quand c’est nécessaire, le thème peut aussi redéfinir la feuille de style dédiée aux formulairesspip_formulaires.css
.
Les images de décoration
Toutes les images de décoration référencées par la css seront rangées dans un sous dossier img/
du thème.
Logo
Le thème peut contenir une image au premier niveau utilisée pour représenter le thème dans l’interface de sélection. Elle sera dans un format 200x150
pixels ou plus grand et proportionnel.
Layout
Le thème doit fournir un layout, ou structure HTML de la page. Il comprend toute la structure du HTML qui sera insérée dans le <body>...</body>
à l’exclusion de la balise <body>
elle même. Ce layout doit inclure les 6 blocs fonctionnels génériques au moyen des lignes suivantes :
-
<INCLURE{fond=inclure/entete,env}>
pour le bloc fonctionnel qui constitue l’en-tête visuelle du site. -
<INCLURE{fond=inclure/barre-nav,env}>
pour la navigation principale du site -
<INCLURE{fond=contenu/#ENV{type},env}>
pour le bloc principal de contenu, qui dépend du type d’objet affiché, donc. -
<INCLURE{fond=navigation/#ENV{type},env}>
pour le bloc de navigation « secondaire » de la page -
<INCLURE{fond=extra/#ENV{type},env}>
pour le bloc d’informations complémentaires de la page -
<INCLURE{fond=inclure/pied,env}>
pour le pied de la page.
Ce layout peut inclure un 7ème bloc qu’il fournira lui même, nommé inc-theme-copyleft.html
sous la forme <INCLURE{fond=inc-theme-copyleft,env}>
. Ce bloc permet d’afficher les éventuelles informations de droits d’auteur et de crédits, y compris éventuellement un lien vers le site de l’auteur. Ce bloc ne doit pas être utilisé pour embarquer d’autres informations.
Ce layout sera renseigné dans le fichier body.html
.
Ce fichier ne doit contenir que des éléments de structure de la page, et ne doit intégrer aucun contenu, sauf à entrainer une incompatibilité avec des squelettes.
plugin.xml
Le thème doit inclure un fichier de description plugin.xml. Ce fichier de description permet de renseigner les informations visibles dans le sélecteur de thème de l’espace privé. Il permet aussi d’installer directement le thème dans le dossier plugins/ et de l’activer depuis le gestionnaire de plugins dans le cas où le webmestre ne veut pas mettre de galerie de thèmes à disposition des administrateurs. Le fichier plugin.xml doit comporter au minimum les informations ci-dessous :
La balise <prefix>
contiendra toujours la valeur « theme » qui permet de distinguer les thèmes, et d’empêcher l’activation de deux thèmes à la fois.
Variantes de thèmes
Lorsqu’un thème visuel comporte plusieurs variantes possibles, il est vivement conseillé de créer un thème indépendant pour chaque variante importante. L’utilisation de panneau de configuration pour personnaliser les thèmes est tout à fait déconseillée car peu compréhensible par les débutants. L’expérience de l’utilisateur doit être privilégiée par rapport à la facilité pour le développeur.
Pratiquement, il est conseillé de faire un dossier thème portant le nom de la famille de thème, qui comportera un sous dossier pour chaque thème activable. Chacun de ces thèmes sera indépendant et comportera son fichier de déclaration plugin.xml
. Les variantes mineures pourront faire l’objet d’un fichier texte dans le thème qui explique quoi changer pour personaliser un peu le thème. [La notion de variante pourra être intégrée au Zen Garden dans le futur, pour en simplifier la gestion pour les développeurs et leur éviter de dupliquer une partie des images et des css.]
PHP et autres mécanismes de plugin
L’utilisation de scripts php dans un thème est fortement déconseillée. Pour des raisons de sécurité, et pour permettre le téléchargement et l’installation automatisée de thèmes, il n’est pas permis de joindre de script PHP, ni de code PHP inline dans l’un des squelettes fournis par le thème.
Pour les mêmes raisons, les mécanismes génériques des plugins éventuellement spécifiés dans plugin.xml
(tels que l’utilisation des pipelines) resteront inactifs lorsque un thème sera sélectionné par le gestionnaire de thèmes.