Attention :
Ce plugin est en cours de développement sur la zone (http://zone.spip.org/trac/spip-zone...). La présente page a juste pour vocation de présenter les objectifs visés pour ce plugin. Aucun SAD [1] ne sera assuré tant que le plugin ne sera pas finalisé. Le noisetier est développé sur la version SVN de SPIP. Il n’est pas compatible avec les versions 1.9.2 et précédentes.
Aux origines du Noisetier
Cela fait longtemps que plusieurs discussions dans la galaxie SPIP portent sur les noisettes (petit bout de squelettes) et notamment sur la construction de page par inclusion de noisettes en différents endroits.
Le plugin/squelette BliP propose via une interface dans l’espace d’administration du site d’inclure ou non des modules dans certaines zones des pages du site.
Le projet du Noisetier est né de la réflexion sur la version 3 de BliP qui généraliserait cette idée d’inclusion, via l’interface privée, de noisettes dans les différentes zones d’une page.
Le Noisetier : un gestionnaire de noisettes
Le principe du Noisetier consiste à découper tout squelette en plusieurs sous ensembles modulaires, dit « noisettes ». Une interface d’administration dans l’espace privé permet au webmaster du site d’insérer les différentes noisettes qu’ils souhaitent sur les pages du site et de les paramétrer. Un compilateur de pages se charge ensuite de générer la page finale sur le site public.
Le plugin Noisetier n’a pour vocation que de s’occuper de la gestion des noisettes. Cependant, les plugins de thèmes pour le noisetier peuvent rajouter des fonctionnalités supplémentaires [2] telles qu’un switcher de styles (CSS) voire même la possibilité de définir soi-même la structure des pages (au travers d’un compilateur de zones)...
Comment ça marche ?
Deux plugins nécessaires
Le Noisetier nécessite pour fonctionner deux plugins : le plugin Noisetier proprement dit, et un plugin de thème compatible, ce qui permet une compatibilité avec le plugin Habillage. [3].
Structure des pages
Chaque page d’un site est découpée en plusieurs zones, typiquement :en-tête, contenu, menu, pied de page, etc. C’est le plugin de thème qui définit les différentes zones possibles [4]. L’interface de gestion du Noisetier permet quant à elle d’inclure les différentes noisettes dans les zones de son choix. Il est possible de désactiver une noisette au besoin, ou de paramétrer une noisette (voir plus loin), ou de déplacer la noisette, de préciser si elle doit apparaitre sur toutes les pages ou seulement sur certaines, ou sur toutes sauf toutes sauf certaines. Il est également possible d’inclure des textes dont les raccourcis typographiques spipiens seront traités.
Lorsque j’appelle une page, par exemple spip.php ?page=article&id_article=5, le squelette article.html situé dans le plugin noisetier est chargé. Cette page va appeler la structure de page située dans le plugin de thème [5] qui va ainsi inclure dans la page les CSS du thème et les div déclarant les différentes zones de la page, puis dans chaque zone, la structure de page du plugin de thème va appeler le compilateur de page du Noisetier. Ce dernier va alors générer le contenu de chaque zone à partir des informations contenues dans une table de la base de données qui décrit le contenu de chaque page.
Répartition des tâches
Il apparait alors que le noisetier ne gère que la construction du contenu de chaque zone, la position des zones dans chaque page étant quant à elle gérée par le plugin de thème. Les plugins de thèmes étant eux mêmes des plugins, ils peuvent fournir des fonctionnalités supplémentaires telles qu’un switcher de CSS par exemple. Il y a une distinction entre le contenu de la page géré par le noisetier (et les noisettes) et la mise en forme de ce contenu gérée par le plugin de thème.
Paramétrer les noisettes
Une déclaration sous une forme à la xml
Les noisettes seront toutes inclues de manière dynamique. Ainsi, chacune pourra avoir sa propre valeur de #CACHE. Cependant, il ne suffit pas de connaitre le nom de fichier de la noisette à installer mais également les variables d’environnement nécessaires au fonctionnement de cette noisette. Les noisettes compatibles avec le Noisetier devront donc avoir une déclaration sous une forme à la xml inclue dans une balise #REM (pour que SPIP n’affiche pas cette déclaration sur les pages du site public) qui fournira au noisetier plusieurs renseignements. Les détails de cette déclaration sont visibles ici : http://groups.google.com/group/nois....
Outre un titre et un descriptif, il sera possible de déclarer les variables d’environnement à passer à la noisette. À l’inclusion de celle-ci, seules les variables nécessaires à son fonctionnement lui seront alors transmises afin de ne pas alourdir inutilement le cache. Mais il est également possible de déclarer d’autres informations.
Emploi de mots clés techniques
D’une part, certaines noisettes peuvent nécessiter l’emploi de mots clés techniques afin de proposer des fonctionnalités avancées. À l’installation de la noisette, le Noisetier se chargera alors d’installer le ou les mots clés nécessaires à cette noisette et non encore présents dans la base de données [6].
Définition de paramètres
Les noisettes pourront également accepter des paramètres. Les paramètres seront modifiables via l’interface du noisetier et sont transmis à la noisette sous forme de variable d’environnement. Ainsi, dans la noisette, elles sont directement récupérables sous la forme #ENV{nom_param}
. Exemples parmi d’autres de paramètres possibles : type de pagination, nombre d’éléments par page (pour la pagination), modèle [7] utilisé pour afficher le résumé d’un article, etc.
Déclaration dans l’en-tête html
Il se peut que certaines noisettes nécessitent une déclaration dans l’en-tête html de la page. Pour le moment, la déclaration est faite dans le descriptif de la noisette mais l’utilisation des balises #DEBUT_TEXTE_HEAD et #FIN_TEXTE_HEAD actuellement en test est envisagée.
Gestion des sources et mise à jour
Il sera possible enfin de déclarer la source d’une noisette (par exemple fraichdits, blip, etc.), un lien de documentation si besoin et surtout le numéro de version de la noisette. En effet, les noisettes pourront être améliorées avec le temps. Lorsque que l’on procède à une mise à jour des noisettes, il sera possible de demander au Noisetier de vérifier le numéro de version des fichiers html des noisettes avec le numéro de version stocké dans la base et, si besoin, de rajouter ou supprimer des paramètres, mots-clés, variables d’environnements qui ne seraient plus pertinents ou manqueraient.
Des fichiers de distribution
Fichiers de distribution
Partir de rien et installer toutes les noisettes d’un site une à une est un travail long et fastidieux. C’est pourquoi le Noisetier pourra utiliser des fichiers de distributions. Présentés sous une forme xml (décrite ici : http://groups.google.com/group/nois...), les fichiers de distribution décrivent quelle noisette (ou texte) installer à quel endroit avec les paramètres qui vont bien.
Un fichier de distribution peut décrire une configuration complète, à installer après vider les tables, ou bien juste un ensemble de noisettes à installer en plus de celles déjà présentes pour rajouter une nouvelle fonctionnalité. Un squelette générant un fichier de distribution de la configuration actuelle du noisetier permettra de réaliser facilement ses propres fichiers de distribution.
Définir une noisette
Le Noisetier considère comme étant une noisette tout fichier .html situé dans un sous-répertoire noisettes, que ce sous-répertoire appartienne à un plugin ou soit situé dans le répertoire squelettes. Autrement, un plugin pourra livrer, si ses auteurs le souhaitent, des noisettes pour le Noisetier. Ces dernières seront reconnues automatiquement par le noisetier si le plugin est activé.
Des pages virtuelles ???
Le plugin Noisetier peut gérer des pages virtuelles, c’est-à-dire des pages qui seront considérées comme telles par le Noisetier mais qui ne correspondront en réalité à aucun fichier .html existant. Mais à quoi cela peut-il donc bien servir ?
Tout d’abord, et de manière standard dans le Noisetier, les pages nécessitant un identifiant particulier, telles que article, breve, site, rubrique etc. réalisent une boucle sur cet identifiant. Si on appelle la page article avec id_article=69
et qu’il existe un article publié numéro 69, alors la page article va appeler la structure de page du plugin de thème en lui précisant que page vaut article [8]. Mais s’il n’y a pas d’article 69, alors la structure de page sera appelée avec la variable page=articles
(notez l’ajout d’un s). article{{s}}
est donc une page virtuelle au sens où elle ne correspond à aucun fichier de squelette mais sera considérée pour le Noisetier comme une page à part entière. Ainsi, on peut dans l’interface du noisetier préciser ce que l’on affichera en l’absence d’id_correct, par exemple un message d’erreur et la liste des derniers articles publiés [9]. Si l’on préfère renvoyer sur la page 404, il suffira d’inclure une noisette dans l’entête de la page articles et qui fera une redirection vers la page 404, tout simplement.
Cas de squelettes différents sur mot clefs
Par ailleurs, les pages virtuelles pourront être utilisée par certains plugins de thème qui souhaiterait offrir la possibilité d’afficher un squelette différent selon un mot clé.
Exemple classique, un site dispose d’un secteur forum de discussion, identifié par un mot clé technique adéquat. Les rubriques et articles de ce secteur doivent avoir une structure de page et un contenu différent que les autres. Comment ça se passe alors ? Cette fois-ci, cela se joue au niveau du plugin de thème. J’appelle toujours mon article 69. La page article.html
détecte que 69 est un id_article correct et appelle la structure de page du plugin de thème [10]. Le plugin de thème, avant d’aller plus loin, va vérifier si l’article 69 est situé ou non dans le secteur forum de discussion. Si ce n’est pas le cas, alors il appelle le compilateur de page avec page=article
. Sinon, il appellera le compilateur de page avec page=article-forum
et le tour est joué. Il faudra juste que dans son fichier mes_options.php
, le plugin de thème déclare au noisetier l’existence d’une page article-forum
. Dans l’interface du Noisetier, on pourra insérer alors les noisettes appropriées dans cette page.
Une série de plugins. ..
Techniquement, le projet Noisetier se présente sous la forme de plusieurs plugins :
Le plugin Noisetier
Le plugin Noisetier proprement dit qui gère les noisettes et compile les pages. Afin de ne pas l’alourdir, il sera livré uniquement avec des noisettes basées sur la distribution fraichdist et permettant de la reproduire.
Des plugins de thème pour le noisetier
Ces plugins comprennenet notamment un thème fraichdist qui reproduira les zones (structure de page) de la distribution fraichdist et proposera un switcher de styles CSS entre les CSS de base de la fraichdist et les autres CSS développés pour la fraichdist. Par ailleurs, ce thème sera livré avec un fichier de distribution permettant de reproduire la fraichdist.
deux plugins de bibliothèques de noisettes :
ces deux plugins fourniront des noisettes supplémentaires qui seront compatibles avec le noisetier et utilisables par les différents thèmes. La première de ces deux bibliothèques comportera des noisettes nécessitant uniquement SPIP et le plugin noisetier. La seconde bibliothèque comportera des noisettes nécessitant d’autres plugins. Par exemple, des noisettes portant sur les évènements du plugin Agenda ou bien des noisettes permettant d’installer les formulaires d’abonnement du plugin SPIP-Listes.
Où en est le développement ?
Le développement du noisetier n’est pas figé. Il dépendra d’ailleurs de certaines évolutions du noyau de SPIP (intégration ou non des balises #DEBUT_TEXTE_HEAD
et #FIN_TEXTE_HEAD
, évolution des mots-clés pour distinguer les mots-clés techniques des autres, ...).
Si le compilateur de pages est opérationnel ainsi que l’installation des noisettes et des textes, il faut encore :
- terminer l’interface de gestion des noisettes ;
- mettre un peu d’ajax là-dedans ;
- permettre le déplacement des noisettes par glisser/déposer (sur le modèle de Forms et tables) ;
- mettre en place les pages de gestion des fichiers de distribution, des mots-clés des noisettes et de mise à jour des noisettes ;
- découper la fraichdist en noisettes et modèles en rajoutant quelques paramètres de ci de là ;
- réaliser un switcher de styles CSS pour le plugin de thème fraichdist ;
- commencer à remplir les bibliothèques de noisettes ;
- réaliser des fichiers de distribution prêt à l’emploi (par exemple une distribution type webzine, type blog, type association, etc.)
et bien sur, rien n’interdira par la suite de passer d’autres squelettes à la moulinette...
Contributions
Vos commentaires, remarques sont les bienvenues sur le forum joint à cet article. Vous pouvez également, et ce sera avec plaisir, contribuez au développement de ce plugin.
Historique des discussions
La question de la gestion des squelettes à l’aide de noisettes a déjà fait l’objet de plusieurs discussions. Pour les personnes intéressées, il est possible de consulter les pages ci-dessous (liste non exhaustive) :
- SpipKits
- SpipKits2
- Coder ses squelettes avec des INCLURE
- Proposition de structure des squelettes SPIP
- Installateur de Squelettes - SPIP Party
Discussions par date d’activité
Une discussion
C’est pile ce que je recherchais.
Je m’étais inspiré de l’article Proposition de structure des squelettes SPIP et effectivement, c’est très pratique de pouvoir (ré)utiliser des blocs [1].
Un des problèmes est la tendance du fichier squelette.html à devenir assez rapidement touffu avec plein de
[(#ENV{skl}|=={skl_sommaire}|?{' ',''})
. Ce problème semble résolu avec le projet noistier vu que l’on peut soit créer un fichier de distribution soit choisir via l’interface d’administration quelles noisettes insérer dans quelle zone.Je ne sais pas s’il est prévu d’ « en-noiseter [2] » les fichiers de la dist mais je pense que cela serait un grand plus pour permettre aux newbies de comprendre et réutiliser facilement des parties de cette dernière.
Je n’ai jamais participé au développement sur la zone mais suis tout à fait prêt à offrir mes services pour un tel projet. Faîtes-moi signe, si je peux être utilie.
L’objectif du projet est d’être suffisamment générique pour que n’importe quel squelette puisse être gérés via le noisetier.
Il est prévu de livrer le noisetier avec l’ensemble des squelettes de la fraichdist découpés en noisettes.
Par ailleurs, les squelettes BliP seront également découpés en noisettes (le noisetier est d’ailleurs né de la réflexion sur la version 3 de BliP).
Rien n’interdit de découper d’autres squelettes sous formes de noisettes et de créer le thème et le fichier de distribution adéquat. de plus, à partir des mêmes noisettes, il est possible de proposer plusieurs fichiers de distribution, par exemple une organisation de type blog et une autre de type webzine.
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |