La gestion générique des thèmes dans pxxo impose de respecter un cadre. La philosophie de pxxo étant d'éviter de fixer des cadres trop strictes, le défi est de trouver une architecture souple et la moins contraignante possible pour les développeurs utilisant pxxo.
Le cadre proposé est le suivant : une structure figée au niveau des répertoires et fichiers d'un composant, et un mécanisme de proxy pour accéder aux ressources.
De plus, ce cadre aurait l'avantage de permettre la constitution d'une bibliothèque de composants génériques qui serait facilement intégrable dans un module PEAR.
Pxxo permet de créer des composants réutilisables, il est donc intuitif de rassembler le code et les ressources spécifiques à un composant dans un seul répertoire. Les types de ressources rencontrées couramment sont le(s) template(s) html, le(s) template(s) javascript, le(s) template(s) CSS, et les images.
Un exemple de structure des répertoires sera plus parlant :
pcPager/pcPager.class.php pcPager/themes/default/templates/main.html.php pcPager/themes/default/templates/script.js.php pcPager/themes/default/templates/style.css.php pcPager/themes/default/images/back.png pcPager/themes/default/images/next.png pcPager/themes/mytheme/images/back.png pcPager/themes/mytheme/images/next.png
pcPager.class.php contiendrait le code de la classe du
composant pxxo.pcPager/themes/ contiendrait des répertoires pour chaque
thèmes (un par thème).pcPager/themes/default/ serait un répertoire particulier
car le thème par défaut du composant. Chaque nouveau thème
surchargerait alors la ou les ressources qu'il souhaite modifier. Par
exemple, le thème mytheme ne redéfinit que les deux images
back.png et next.png. Lorsque le composant sera
affiché en utilisant le thème mytheme, alors le composant
sélectionnera les ressources qu'il ne trouve pas dans le thème par
défaut : main.html.php, script.js.php et
style.css.php.Le répertoire du composant peut être placé dans un répertoire non accessible par les navigateurs Web (hors du DocumentRoot du serveur Web). Il faut donc un système de proxy pour récupérer les ressources du composant et ainsi rendre les ressources visibles par les navigateurs Web.
Je vois deux solutions :
Idée : Utiliser un paramètre (ex : theme) lors de
l'instanciation du composant Pxxo.
Idée : Passer l'information par l'URL, par exemple : ajouter un
paramètre &theme=blue, chaque composants pourra alors
changer automatiquement de thème à la condition d'existence du répertoire
blue dans ses répertoires de thèmes.
Puisque les composants ont pour vocation d'être réutilisables, ils sont susceptibles de l'être par n'importe qui. Il n'est donc logique de considérer un composant pxxo comme une librairie partagées. Cette librairie est créée par un développeur puis d'autres développeurs l'utilisent par le biais de son API sans en toucher les sources. Cette librairie est également amenée à évoluer (v1, v2 ...).
Dans le cadre des thèmes, il est donc important de définir un mécanisme pour permettre aux utilisateurs du composant de créer un thème sans toucher au code source original du composant. Ainsi, les développeurs peuvent dissocier le code de leur application du code des librairies utilisées. La mise à jour des librairies est alors triviale.
Idée : définir un paramètre générique pour le répertoire des
thèmes (ex : themepath). On aurait alors la possibilité au
moment de l'instanciation du composant de lui indiquer un autre répertoire
de thèmes que celui du composant original.