Proposition d'architecture pour la gestion des thèmes dans Pxxo

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.

Architecture des répertoires

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

Proxy d'accès aux ressources

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 :

  1. Copier lors d'une phase d'installation les ressources du composant dans un espace publique.
  2. Placer un script dans un répertoire publique qui sera chargé en fonction de paramètres passés par l'url (ou autre) de transmettre les bonnes ressources au navigateur.

Sélectionner le thème du composant

Statiquement dans le code

Idée : Utiliser un paramètre (ex : theme) lors de l'instanciation du composant Pxxo.

Dynamiquement par l'utilisateur

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.

Ajouter un nouveau thème sans altérer le composant original

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.