Le projet « Noisetier » en développement

Ceci est une archive périmée mais qui reste intéressante, parfois autant pour l’article que les commentaires associés.

Attention, cette contribution est EN CHANTIER : elle n’est peut-être pas fonctionnelle.


Nota : une contrib au développement arrêté par son créateur, pour laisser la place au noiZetier.

Ce plugin offre une interface d’administration permettant d’insérer au choix des éléments modulaires de squelettes (noisettes) et de construire ainsi ses propres squelettes personnalisés.

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

Notes

[1SAD : Service Après Don

[2Des pipelines sont par ailleurs disponibles dans la page de gestion des noisettes.

[3Nous parlerons de plugin de thèmes pour le Noisetier. Cette terminologie a été choisie car le noisetier et les plugins de thèmes comporteront un fichier theme.xml les rendant compatible avec le plugin Habillage. Dans la terminologie de ce plugin, les plugins de thèmes pour le Noisetier seront des thèmes au sens de Habillage.

[4Si besoin est, il est possible de définir des zones différentes selon les pages. Par exemple, s’il existe une zone [infos contextuelles, il est possible de préciser que cette zone ne doit pas apparaître sur la page plan et la page sommaire.

[5Techniquement, la page article.html va inclure les fichier noisetier-body.html et noisetier-head.html qui sont situés dans le plugin de thème. Comme un seul plugin de thème est censé être activé en même temps, normalement ce seront les bons fichiers qui seront inclus. Pour les petits curieux, il suffit d’aller le code sur la zone : http://zone.spip.org/trac/spip-zone....

[6Par ailleurs, le Noisetier pourra gérer le fait que plusieurs noisettes utilisent le même mot clé. À la désinstallation d’une noisette, le choix sera laissé de conserver ou non les mots clés associés à la noisette. Enfin, une page de gestion des mots clés des noisettes permettra de récapituler l’ensemble des mots-clés créés et de voir les mots-clés qui ne sont plus utilisés.

[7Lorsqu’on liste les 10 derniers articles publiés, il est possible d’afficher le résumé de chaque article de plusieurs manières : juste le titre avec un lien, titre, auteur et date ou bien encore titre, date auteurs et intro avec logo. Un même résumé peut être utilisé en plusieurs endroits du site : liste des derniers articles en page sommaire, résultats d’une recherche, articles contenus dans une rubrique, etc. Nous retenons l’idée d’avoir recours à des modèles. Le modèle à utiliser est alors un paramètre de la noisette listant les 10 derniers articles. Dans l’interface du Noisetier, on peut sélectionner le modèle d’article à utiliser. le paramètre est alors passé à la noisette qui réalisera alors l’inclusion adéquate. plus de détails sur cette idée ici : http://groups.google.com/group/nois....

[8structure de page qui appellera ensuite le compilateur de page en lui passant la variable page=article, vous vous rappelez.

[9Ce que fait notamment BliP.

[10Rappel : les fichiers noisetier-head.html et noisetier-body.html.

Le logo de cet article provient de Wikipédia et se situe dans le domaine public.

Discussion

Une discussion

  • 1

    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 :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

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.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom