[SPIP Zone] r36332 - noiZetier 0.2

Author: joseph-x+8GNkP+qxjBR+Zhj3ejFg@public.gmane.org
Date: 2010-03-17 10:29:34 +0100 (Wed, 17 Mar 2010)
New Revision: 36332

Log:
Mise en ligne d'une version 0.2 du noizetier. Voir NoiZetier - SPIP-Contrib pour plus de détails.

Details: Connexion · GitLab

Suite aux différentes remarques, critiques et commentaires exprimées sur la liste lors de la mise en ligne d'une première version version du noizetier, je viens de mettre en ligne une nouvelle mouture remodelé au fonctionnement différent.

Dorénavant, le noizetier ajoute des noisettes aux contenus définis par les squelettes.

La description du plugin a été mise à jour sur NoiZetier - SPIP-Contrib

Pour les personnes souhaitant que l'ensemble des contenus soient gérés sous forme de noisettes, il y a un squelette Z compatible nommé Aveline qui surcharge Zpip et fournit les noisettes permettant de gérer les contenus usuellement fournis par les squelettes.

Je rappelle qu'il ne s'agit que d'un prototype visant à alimenter la discussion et le débat sur ce que pourrait être un gestionnaire de noisettes pour squelettes Z.
Les commentaires, critiques, remarques sont de fait les bienvenus.

Cordialement à tous

Joseph

Joseph,

J’ai une question au préalable. C’est le Z de noizetier qui me dérange. Est ce que ça veux dire que le noisetier est uniquement compatible avec un squelette Z ?

En effet, sur Zen garden, initialement prévu pour Z, en faisant une petite modification générique j’ai pu l’adapter sans problème à Sarka-SPIP et donc à tous autres squelettes non Z. Est ce le cas pour le noisetier ?

++
Eric

Le 17 mars 2010 10:40, Joseph <joseph@larmarange.net> a écrit :

Author: joseph-x+8GNkP+qxjBR+Zhj3ejFg@public.gmane.org
Date: 2010-03-17 10:29:34 +0100 (Wed, 17 Mar 2010)
New Revision: 36332

Log:
Mise en ligne d’une version 0.2 du noizetier. Voir http://www.spip-contrib.net/noiZetier pour plus de détails.

Details: http://zone.spip.org/trac/spip-zone/changeset/36332

Suite aux différentes remarques, critiques et commentaires exprimées sur la liste lors de la mise en ligne d’une première version version du noizetier, je viens de mettre en ligne une nouvelle mouture remodelé au fonctionnement différent.

Dorénavant, le noizetier ajoute des noisettes aux contenus définis par les squelettes.

La description du plugin a été mise à jour sur http://www.spip-contrib.net/noiZetier

Pour les personnes souhaitant que l’ensemble des contenus soient gérés sous forme de noisettes, il y a un squelette Z compatible nommé Aveline qui surcharge Zpip et fournit les noisettes permettant de gérer les contenus usuellement fournis par les squelettes.

Je rappelle qu’il ne s’agit que d’un prototype visant à alimenter la discussion et le débat sur ce que pourrait être un gestionnaire de noisettes pour squelettes Z.
Les commentaires, critiques, remarques sont de fait les bienvenus.

Cordialement à tous

Joseph


spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Le 18/03/2010 08:58, Eric a écrit :

Joseph,

J'ai une question au préalable. C'est le Z de noizetier qui me dérange.
Est ce que ça veux dire que le noisetier est uniquement compatible avec
un squelette Z ?

En effet, sur Zen garden, initialement prévu pour Z, en faisant une
petite modification générique j'ai pu l'adapter sans problème à
Sarka-SPIP et donc à tous autres squelettes non Z. Est ce le cas pour le
noisetier ?

++
Eric

Le noizetier est prévu pour fonctionner nativement avec tous squelette Z générique. Cependant il est possible de le faire fonctionner avec d'autres squelettes moyennant quelques modifications. Tout d'abord, je viens de supprimer le <necessite id="Z"> du pugin.xml.

Le fonctionnement par défaut du noizetier avec un squelette Z :
les pages qui peuvent recevoir des noisettes sont celles ayant un squelette.html présent dans le sous--répertoire contenu. Par défaut, on peut ajouter des noisettes à trois blocs : contenu, extra et navigation.
Via le pipeline 'recuperer_fond', le noizetier détecte l'appel au fond de type 'bloc/page' et ajoute au flux les noisettes correspondantes. Plus précisément, dans le pipeline 'recuperer_fond' le noizetier ajoute au flux l'appel au squelette 'noizetier-generer-bloc.html' en lui passant les variables d'environnement et les variables 'bloc' 'type' et 'composition'.

Utilisation du noizetier avec d'autres squelettes.

Cas 1 :
comme pour les squelettes Z, les contenus de chaque bloc sont définis par un squelette 'page.html' (plus précisément 'type-composition.html') situés dans des sous-répertoires 'bloc/'.

Sous-cas 1.1 : Les contenus principaux, dont les compositions, sont situés dans le sous-répertoire 'contenu/'.
Le noizetier va correctement détecter les pages pouvant recevoir des noisettes. Les blocs par défaut des différentes pages sont modifiables facilement via le pipeline 'noizetier_blocs_defaut'. Le noizetier va repérer naturellement l'appel aux squelettes 'bloc/page' et rajoutera automatiquement les noisettes.

Sous-cas 1.2 : la liste des pages pouvant recevoir des noisettes sont définies différemment ou il n'y a pas de sous-répertoire 'contenu'. Il existe un pipeline 'noizetier_lister_pages' qui permet de modifier ou de changer le tableau contenant les informations (dont les blocs) des pages pouvant recevoir des noisettes. Le contenu des différents blocs est toujours organisé selon la logique 'bloc/page'. Le noizetier interceptera l'appel à ces squelettes et ajoutera automatiquement les noisettes aux blocs en question.

Cas 2 :
l'organisation des squelettes et des inclusions suit une logique différente de celles des squelettes Z. Par exemple, une partie du contenu des pages est directement codé dans les squelettes racine (article.html etc) et diverses inclusions sont faites.
Le noizetier ne saura pas tout seul interpréter cette organisation des fichiers.

Il faudra utiliser le pipeline 'noizetier_lister_pages' pour lui passer le tableau décrivant les pages (et les blocs de chacune) surlesquelles il est possible d'ajouter des noisettes.
ATTENTION : si le nom de certaines pages contient un tiret '-', alors le noizetier décomposera ce nom sous la forme type-page.
Il faut ensuite, au calcul des squelettes, détecter où ajouter les noisettes. Trois manières de procéder :

Sous-cas 2.1 : le squelette a recours au pipeline 'recuperer_fond' pour appeler 'noizetier-generer-bloc' avec les bon paramètres. ne fonctionne que si les blocs sont situés à la fin d'une inclusion.

Sous-cas 2.2 : utiliser un <INCLURE{fond=noizetier-generer-bloc}{bloc='nombloc'}{type='typepage'}{composition='compo ou vide'}{env}> dans les squelettes là où il faut ajouter des noisettes.

Sous-cas 2.3 : utiliser des boucles (NOISETTES) et la balise #NOIZETIER_AFFICHER_NOISETTE dans les squelettes.

On peut envisager une constante dans un fichier options.php pour désactiver le traitement effectué par le noizetier dans le pipeline 'recuperer_fond' pour les squelettes dans le cas 2.

Le Z dans noiZetier fait référence au fait que le noiZetier fonctionne nativement avec les squelettes suivant la norme Z. Cela pose-t-il un problème pour des squelettes non Z. Est-il préférable de renommer en 'noisetier' ?

Ces explications sont-elles suffisamment claires ?

PS : dans le cas du squelette sarka-spip, il existe un répertoire noisettes ce qui peut interférer avec le noizetier. Est considérée comme noisette par le noizetier tout squelette .html accompagné de son .xml situé dans un sous-répertoire noisettes/. Il y a une convention de nommage des noisettes : voir NoiZetier - SPIP-Contrib.

Bien cordialement

Joseph

Cas 1 :

[...]

très bien pensé je trouve.

Cas 2 :

[...]
on ne peut pas dire que tout n'a pas été fait pour que ce soit
adaptable en dehors de Z \o/
ce cas m'intéressant particulièrement, l'approche adopté me met aux
anges. y a plus qu'à tester :slight_smile:

mercinfiniment ;-

Tous les retours sont bons à prendre

Le 18/03/2010 21:12, Gildas Cotomale a écrit :

Cas 1 :

[...]

très bien pensé je trouve.

Cas 2 :

[...]
on ne peut pas dire que tout n'a pas été fait pour que ce soit
adaptable en dehors de Z \o/
ce cas m'intéressant particulièrement, l'approche adopté me met aux
anges. y a plus qu'à tester :slight_smile:

mercinfiniment ;-

Bonjour,

je suis en plein préparatifs de voyage (je pars deux semaines à l’étranger pour mon travail) et avant de partir je vais essayer de commiter l’import/export de configuration au format YAML et la possibilité de créer des compositions qui ne différeraient que par leurs noisettes.

Encore une fois, ce n’est qu’un prototype susceptible d’évoluer.

Le principe du noizetier est avant tout d’offrir au webmaster du site une interface dans l’espace privé lui permettant d’ajouter des noisettes en différents endroits du site. Ces noisettes sont bien surs paramétrables.

Pour avoir une idée de l’objectif que je recherche, tu peux essayer sur un site de test d’installer Zpip, noizetier et le plugin aveline (pour le moment ranger sur la zone avec le noizetier) et de te rendre sur ecrire/?exec=noizetier

Le principe du squelette aveline est de fournir un squelette Z vide de contenu, tous les contenus étant ajoutés sous formes de noisettes, fournies par ce squelette. Seules quelques noisettes sont disponibles aujourd’hui dans aveline mais il y a de quoi tester le principe avec la page article.
Cela permettra de visualiser un peu mieux comment fonctionne le noizetier. Le noizetier ne vise que l’inclusion de noisettes paramétrées définies via une interface dans l’espace privée, inclusion venant en plus du contenu principal défini via les squelettes. Il ne s’intéresse donc pas au paramétrage de ces squelettes, ce que sarka fait très bien via CFG.

Quelques soient le squelette utilisé, il importe de :

  • déterminer les pages et les blocs qui peuvent recevoir des noisettes, pour l’interface de configuration qui stockera la configuration dans une table spip_noisettes. Dans Zpip, la liste des pages s’obtient en analysant le répertoire contenu et la liste des blocs est connue (contenu, navigation, extra). Pour d’autres squelettes, cela peut être différent.

  • insérer les noisettes aux bons endroits. Avec un squelette Z, cela est fait via le pipeline recuperer_fond car le bloc correspond à un sous-répertoire et que les variables type et composition sont disponibles comme variables d’environnement. Pour d’autres squelettes, il faut déterminer si le plus simple est de passer par ce pipeline ou bien par un <INCLURE{fond=noizetier-

    generer-bloc}{bloc=‹ nombloc ›}{type=‹ typepage ›}{composition=‹ compo ou vide ›}{env}>. Le problème de l’inclure, c’est qu’il faut vérifier la présence du plugin avant de le faire.

Dans le répertoire noisettes de sarkaspip, il y a des éléments qui sont inclus d’office dans les pages.
Dans la logique du noizetier, le répertoire noisettes contient uniquement des contenus que le webmaster du site peut optionnellement ajouter aux différentes pages.

Concernant une bibliothèque de noisettes, je ne pense pas que c’est au noizetier de les fournir, à part peut être la noisettes rajoutant un bloc de texte.
Certaines noisettes génériques devraient être fournies par le plugin concerné. Par exemple dans le plugin Menus une noisettes permettant d’afficher un menu.

Les noisettes spécifiques dépendent pour leur part d’un squelette. Il y a d’une part la convention de nommage des noisettes qui peut différer d’un squelette à l’autre. Zpip est en train de se doter d’une convention de nommage http://www.spip-contrib.net/Conventions-de-nommage-dans-Zpip qui ne concernent que les squelettes Z. Je ne connais pas la convention de nommage de Sarka mais je suppose qu’elle diffère (puisqu’il ne s’agit pas des mêmes thèmes).
Une noisette qui affiche le contenu principal d’un article est pertinente dans Aveline puisque tous les contenus sont déterminés sous forme de noisettes. Mais si on utilise Zpip seul ca n’a pas de sens puisque le contenu principal est déjà fourni.

La question de savoir qui fourni telle noisette mérite probablement d’être développée.

Concernant le nommage des noisettes, pour le moment le noizetier utilisage une convention de nommage afin de déterminer sur quelles pages il peut proposer cette noisette. Voir http://www.spip-contrib.net/noiZetier

Ranger des noisettes dans des sous-répertoires correspondrait à quelle logique ? Quelle serait la convention de rangement ?

Cordialement

Joseph

Le 20 mars 2010 10:28, Eric Lupinacci <eric@smellup.net> a écrit :

Hello Joseph,

Merci beaucoup pour tes explications mais j’ai vraiment du mal à rentrer dedans.
Dans Sarka-SPIP aujourd’hui j’ai beaucoup de noisettes et j’ai introduit des pipelines pour insérer des squelettes à certains endroits (navigation, extra en particulier).
Donc le noisetier pourrait apporter beaucoup, c’est une réflexion que j’ai aussi depuis longtemps car ça devrait:

  1. Une bibliothèques de noisettes réutilisables
  2. La possibilité de trier les rubriques dans un ordre choisi par le webmestre (je n’ai pas comment d’ailleurs pour l’instant?)

Le fonctionnement par défaut du noizetier avec un squelette Z :
les pages qui peuvent recevoir des noisettes sont celles ayant un squelette.html présent dans le sous–répertoire contenu. Par défaut, on peut ajouter des noisettes à trois blocs : contenu, extra et navigation.

Je comprends pas cette limite de la liste des pages. On pourrait pas plutôt définir la liste autrement de façon plus générique ?
Ok, donc les blocs ce sont ceux au sens de Z, les div d’id contenu, navigation et extra. Là aussi on pourrait définir la liste des blocs de façon plus générique non?

Via le pipeline ‹ recuperer_fond ›, le noizetier détecte l’appel au fond de type ‹ bloc/page › et ajoute au flux les noisettes correspondantes. Plus précisément, dans le pipeline ‹ recuperer_fond › le noizetier ajoute au flux l’appel au squelette ‹ noizetier-generer-bloc.html › en lui passant les variables d’environnement et les variables ‹ bloc › ‹ type › et ‹ composition ›.

Euh… en lisant la liste des noisettes dans noisettes/ ?

Utilisation du noizetier avec d’autres squelettes.

Cas 1 :
comme pour les squelettes Z, les contenus de chaque bloc sont définis par un squelette ‹ page.html › (plus précisément ‹ type-composition.html ›) situés dans des sous-répertoires ‹ bloc/ ›.

Voila un autre truc qui me gêne. Dans Sarka, les albums sont des articles avec un affichage particulier. Ca serait donc une composition article_album. Mais si je n’utilise pas compositions je peux quand même gérer les noisettes d’une page nommée album ?
En tout cas, il faut absolument réorganiser le squelette avec des sous-rep bloc/ si je comprends bien.

Sous-cas 1.1 : Les contenus principaux, dont les compositions, sont situés dans le sous-répertoire ‹ contenu/ ›.
Le noizetier va correctement détecter les pages pouvant recevoir des noisettes. Les blocs par défaut des différentes pages sont modifiables facilement via le pipeline ‹ noizetier_blocs_defaut ›. Le noizetier va repérer naturellement l’appel aux squelettes ‹ bloc/page › et rajoutera automatiquement les noisettes.

Je suis pas tout là…

Sous-cas 1.2 : la liste des pages pouvant recevoir des noisettes sont définies différemment ou il n’y a pas de sous-répertoire ‹ contenu ›. Il existe un pipeline ‹ noizetier_lister_pages › qui permet de modifier ou de changer le tableau contenant les informations (dont les blocs) des pages pouvant recevoir des noisettes. Le contenu des différents blocs est toujours organisé selon la logique ‹ bloc/page ›. Le noizetier interceptera l’appel à ces squelettes et ajoutera automatiquement les noisettes aux blocs en question.

Ok, donc là je peux utiliser mes noms de page et de bloc mais je dois absolument redéfinir mon arbo ?

Cas 2 :
l’organisation des squelettes et des inclusions suit une logique différente de celles des squelettes Z. Par exemple, une partie du contenu des pages est directement codé dans les squelettes racine (article.html etc) et diverses inclusions sont faites.
Le noizetier ne saura pas tout seul interpréter cette organisation des fichiers.

Il faudra utiliser le pipeline ‹ noizetier_lister_pages › pour lui passer le tableau décrivant les pages (et les blocs de chacune) surlesquelles il est possible d’ajouter des noisettes.
ATTENTION : si le nom de certaines pages contient un tiret ‹ - ›, alors le noizetier décomposera ce nom sous la forme type-page.
Il faut ensuite, au calcul des squelettes, détecter où ajouter les noisettes. Trois manières de procéder :

Sous-cas 2.1 : le squelette a recours au pipeline ‹ recuperer_fond › pour appeler ‹ noizetier-generer-bloc › avec les bon paramètres. ne fonctionne que si les blocs sont situés à la fin d’une inclusion.

Sous-cas 2.2 : utiliser un <INCLURE{fond=noizetier-generer-bloc}{bloc=‹ nombloc ›}{type=‹ typepage ›}{composition=‹ compo ou vide ›}{env}> dans les squelettes là où il faut ajouter des noisettes.

Sous-cas 2.3 : utiliser des boucles (NOISETTES) et la balise #NOIZETIER_AFFICHER_NOISETTE dans les squelettes.

Ah oui ! 2.2 et 2.3 c’est finalement le plus simple pour un squelette non Z. J’ai des inclusions extra.html et navigation.html qui font finalement de façon plus frustre ce que le noisetier fait de façon plus pertinente. Si tu as deux secondes pour regarder le code de Sarka…
En fait, je suppose alors qu’il me suffirait d’avoir une interface de choix du rang de la noisette pour paramétrer la liste. Mais comment je peux faire pour activer ou désactiver une noisette ?

On peut envisager une constante dans un fichier options.php pour désactiver le traitement effectué par le noizetier dans le pipeline ‹ recuperer_fond › pour les squelettes dans le cas 2.

Le Z dans noiZetier fait référence au fait que le noiZetier fonctionne nativement avec les squelettes suivant la norme Z. Cela pose-t-il un problème pour des squelettes non Z. Est-il préférable de renommer en ‹ noisetier › ?

Oh oui ! Je trouverais cela de toute façon plus clair et joli :stuck_out_tongue:

Ces explications sont-elles suffisamment claires ?

PS : dans le cas du squelette sarka-spip, il existe un répertoire noisettes ce qui peut interférer avec le noizetier. Est considérée comme noisette par le noizetier tout squelette .html accompagné de son .xml situé dans un sous-répertoire noisettes/. Il y a une convention de nommage des noisettes : voir http://www.spip-contrib.net/noiZetier.

Oui je vais le renommer en inclure/. Mais juste un truc, il serait peut etre pas mal de ranger les noisettes dans des sous-rep de noisettes/ non ? Par exemple, pour faire des sortes de bibliotheques et éviter les doublons de nom.

++
Eric

Le noizetier ne vise que l'inclusion de noisettes paramétrées définies via
une interface dans l'espace privée, inclusion venant en plus du contenu
principal défini via les squelettes. Il ne s'intéresse donc pas au
paramétrage de ces squelettes, ce que sarka fait très bien via CFG.

Quelques soient le squelette utilisé, il importe de :

déterminer les pages et les blocs qui peuvent recevoir des noisettes, pour
l'interface de configuration qui stockera la configuration dans une table
spip_noisettes. Dans Zpip, la liste des pages s'obtient en analysant le
répertoire contenu et la liste des blocs est connue (contenu, navigation,
extra). Pour d'autres squelettes, cela peut être différent.

insérer les noisettes aux bons endroits. Avec un squelette Z, cela est fait
via le pipeline recuperer_fond car le bloc correspond à un sous-répertoire
et que les variables type et composition sont disponibles comme variables
d'environnement. Pour d'autres squelettes, il faut déterminer si le plus
simple est de passer par ce pipeline ou bien par un <INCLURE{fond=noizetier-

generer-bloc}{bloc='nombloc'}{type='typepage'}{composition='compo ou
vide'}{env}>. Le problème de l'inclure, c'est qu'il faut vérifier la
présence du plugin avant de le faire.

Dans le répertoire noisettes de sarkaspip, il y a des éléments qui sont
inclus d'office dans les pages.
Dans la logique du noizetier, le répertoire noisettes contient uniquement
des contenus que le webmaster du site peut optionnellement ajouter aux
différentes pages.

C'est que sarkaspip a une longue histoire pré-Z... son répertoire
noisettes joue un peu le même rôle que l'habituel répertoire "include"
ou "inc" (je grossi un peu... mais pour être plus précis, c'est un
mélange de "contenus" et "noisettes" qui sont inclus par les pages, et
c'est assez efficace..)

[...]

Ranger des noisettes dans des sous-répertoires correspondrait à quelle
logique ? Quelle serait la convention de rangement ?

ce serait la même logique que les plugins ou les thèmes : les
noisettes peuvent avoir des fichiers annexes qu'il convient de
regrouper et de distribuer ensemble (c'est intéressant quand la
noisette n'est pas distribuée avec un plugin ou un squelette)

Le 20 mars 2010 12:32, Gildas Cotomale <gildas.cotomale@gmail.com> a écrit :

C’est que sarkaspip a une longue histoire pré-Z… son répertoire
noisettes joue un peu le même rôle que l’habituel répertoire « include »
ou « inc » (je grossi un peu… mais pour être plus précis, c’est un
mélange de « contenus » et « noisettes » qui sont inclus par les pages, et
c’est assez efficace…)

[…]

Ranger des noisettes dans des sous-répertoires correspondrait à quelle
logique ? Quelle serait la convention de rangement ?

ce serait la même logique que les plugins ou les thèmes : les
noisettes peuvent avoir des fichiers annexes qu’il convient de
regrouper et de distribuer ensemble (c’est intéressant quand la
noisette n’est pas distribuée avec un plugin ou un squelette)

Peut-être me faut-il clarifier ce qui est appelé une noisette au sens du noizetier. Peut-être le nom est-il mal choisi.
Il est vrai que beaucoup ont coutume d’appeler noisette un morceau de squelette ayant vocation a être inclue / appelée par un ou plusieurs squelettes parents.

Dans le cas du noiZetier, une noisette est un objet spécifique possédant un certain formalisme notamment concernant son nom (voir page-nomnoisette pour une noisette pouvant aller sur n’importe quelle page, article-nomnoisette pour une noisette pouvant aller uniquement sur une page artice ou une composition de la page article) et un descriptif au format xml précisant un nom, une description une icone et des paramètres de configuration.

Une telle noisette au sens du noizetier est située dans un répertoire noisettes/ tout comme les modèles sont dans un sous-répertoire modeles, les entrées de menu dans un sous-répertoire menus/, les saisies dans saisies/ et les formulaires dans formulaires/.

Le noizetier recherche donc uniquement les fichier .html présent à la racine de noisettes/ et accompagnés d’un fichier xml. (via la fonction find_in_path)

De fait, la logique des noisettes selon le noizetier, correspond plus à la logique des saisies et des entrées de menus (pouvant être fournies par différents plugins) car la logique des plugins et des thèmes.

Cela ne signifie pas qu’une noisette ne peut pas avoir ses propres inclusions, ces dernières pouvant être dans noisettes/ un sous-répertoire de noisettes ou ailleurs.

Disons que le noizetier pousse à distinguer les inclusions gérées directement par les squelettes appelant des « noisettes » (au sens qu’il lui donne) qui sont des objets manipulables par l’interface de gestion du noizetier et dont le noizetier gère l’insertion dans les pages. L’interface de gestion du noizetier est prévue pour être utilisable par une personne n’y connaissant strictement rien au code.

Il s’agit donc d’une brique dans la personnalisation des contenus tout comme le plugin menus permet de gérer des menus via une interface.

Est-ce l’usage du mot noisette qui pose problème, ce dernier ayant déjà une histoire dans l’univers spip ?

Ayant un peu de temps, je vais essayer de répondre un peu plus précisément à ce mail.

Le 20 mars 2010 10:28, Eric Lupinacci <eric@smellup.net> a écrit :

Hello Joseph,

Merci beaucoup pour tes explications mais j’ai vraiment du mal à rentrer dedans.
Dans Sarka-SPIP aujourd’hui j’ai beaucoup de noisettes et j’ai introduit des pipelines pour insérer des squelettes à certains endroits (navigation, extra en particulier).
Donc le noisetier pourrait apporter beaucoup, c’est une réflexion que j’ai aussi depuis longtemps car ça devrait:

  1. Une bibliothèques de noisettes réutilisables
  2. La possibilité de trier les rubriques dans un ordre choisi par le webmestre (je n’ai pas comment d’ailleurs pour l’instant?)

Le fonctionnement par défaut du noizetier avec un squelette Z :
les pages qui peuvent recevoir des noisettes sont celles ayant un squelette.html présent dans le sous–répertoire contenu. Par défaut, on peut ajouter des noisettes à trois blocs : contenu, extra et navigation.

Je comprends pas cette limite de la liste des pages. On pourrait pas plutôt définir la liste autrement de façon plus générique ?
Ok, donc les blocs ce sont ceux au sens de Z, les div d’id contenu, navigation et extra. Là aussi on pourrait définir la liste des blocs de façon plus générique non?

Il s’agit ici du fonctionnement avec un squelette Z. Voir plus loin dans les autres cas.

Via le pipeline ‹ recuperer_fond ›, le noizetier détecte l’appel au fond de type ‹ bloc/page › et ajoute au flux les noisettes correspondantes. Plus précisément, dans le pipeline ‹ recuperer_fond › le noizetier ajoute au flux l’appel au squelette ‹ noizetier-generer-bloc.html › en lui passant les variables d’environnement et les variables ‹ bloc › ‹ type › et ‹ composition ›.

Euh… en lisant la liste des noisettes dans noisettes/ ?

Les noisettes ajoutées aux pages ne sont pas les noisettes trouvées dans le répertoire noisettes/ mais les noisettes définies dans l’interface de configuration du noisetier. De la même manière, un menu généré par le plugin menu est déterminé par la configuration du dit menu dans l’interface privée et non directement par le contenu du répertoire menus/.

Il me semble qu’une démonstration est plus efficace que de longs discours. Je t’encourage donc à essayer le plugin noizetier en conjonction avec Zpip et Aveline (optionnellement avec saisies, yaml et compositions) sur un site de test pour comprendre sa logique.

Utilisation du noizetier avec d’autres squelettes.

Cas 1 :
comme pour les squelettes Z, les contenus de chaque bloc sont définis par un squelette ‹ page.html › (plus précisément ‹ type-composition.html ›) situés dans des sous-répertoires ‹ bloc/ ›.

Voila un autre truc qui me gêne. Dans Sarka, les albums sont des articles avec un affichage particulier. Ca serait donc une composition article_album. Mais si je n’utilise pas compositions je peux quand même gérer les noisettes d’une page nommée album ?
En tout cas, il faut absolument réorganiser le squelette avec des sous-rep bloc/ si je comprends bien.

Uniquement si tu souhaites utiliser le pipeline recuperer_fond du noizetier. Auquel cas, tu n’as rien à ajouter à tes squelettes, le noizetier se débrouillant tout seul.

Sous-cas 1.1 : Les contenus principaux, dont les compositions, sont situés dans le sous-répertoire ‹ contenu/ ›.
Le noizetier va correctement détecter les pages pouvant recevoir des noisettes. Les blocs par défaut des différentes pages sont modifiables facilement via le pipeline ‹ noizetier_blocs_defaut ›. Le noizetier va repérer naturellement l’appel aux squelettes ‹ bloc/page › et rajoutera automatiquement les noisettes.

Je suis pas tout là…

Ce sous-cas correspond à un squelette ayant un formalisme proche de celui de Z. Rien ne t’y oblige, voir ci-dessous.

Sous-cas 1.2 : la liste des pages pouvant recevoir des noisettes sont définies différemment ou il n’y a pas de sous-répertoire ‹ contenu ›. Il existe un pipeline ‹ noizetier_lister_pages › qui permet de modifier ou de changer le tableau contenant les informations (dont les blocs) des pages pouvant recevoir des noisettes. Le contenu des différents blocs est toujours organisé selon la logique ‹ bloc/page ›. Le noizetier interceptera l’appel à ces squelettes et ajoutera automatiquement les noisettes aux blocs en question.

Ok, donc là je peux utiliser mes noms de page et de bloc mais je dois absolument redéfinir mon arbo ?

A toi de dire quelles sont les pages qui peuvent recevoir des noisettes et les blocs de chacune de ces pages.
La liste de ces pages dépend de ton squelette. Usuellement il s’agit des pages article, rubrique etc. Mais suivant le squelette, ca peut différer. L’interface du noisetier doit savoir les pages et les blocs sur lesquels il doit permettre à l’utilisateur d’inclure des noisettes. Il suffit de lui passer un tableau via le pipeline noizetier_lister_pages. Ce tableau peut être défini en dur dans ton squelette.

Cas 2 :
l’organisation des squelettes et des inclusions suit une logique différente de celles des squelettes Z. Par exemple, une partie du contenu des pages est directement codé dans les squelettes racine (article.html etc) et diverses inclusions sont faites.
Le noizetier ne saura pas tout seul interpréter cette organisation des fichiers.

Il faudra utiliser le pipeline ‹ noizetier_lister_pages › pour lui passer le tableau décrivant les pages (et les blocs de chacune) surlesquelles il est possible d’ajouter des noisettes.
ATTENTION : si le nom de certaines pages contient un tiret ‹ - ›, alors le noizetier décomposera ce nom sous la forme type-page.
Il faut ensuite, au calcul des squelettes, détecter où ajouter les noisettes. Trois manières de procéder :

Sous-cas 2.1 : le squelette a recours au pipeline ‹ recuperer_fond › pour appeler ‹ noizetier-generer-bloc › avec les bon paramètres. ne fonctionne que si les blocs sont situés à la fin d’une inclusion.

Sous-cas 2.2 : utiliser un <INCLURE{fond=noizetier-generer-bloc}{bloc=‹ nombloc ›}{type=‹ typepage ›}{composition=‹ compo ou vide ›}{env}> dans les squelettes là où il faut ajouter des noisettes.

Sous-cas 2.3 : utiliser des boucles (NOISETTES) et la balise #NOIZETIER_AFFICHER_NOISETTE dans les squelettes.

Ah oui ! 2.2 et 2.3 c’est finalement le plus simple pour un squelette non Z. J’ai des inclusions extra.html et navigation.html qui font finalement de façon plus frustre ce que le noisetier fait de façon plus pertinente. Si tu as deux secondes pour regarder le code de Sarka…

Il s’agit bien ici des inclusions de noisettes définies via l’interface du noizetier. Les inclusions non modifiables par l’utilisateur ne dépendent pas du noizetier.

En fait, je suppose alors qu’il me suffirait d’avoir une interface de choix du rang de la noisette pour paramétrer la liste. Mais comment je peux faire pour activer ou désactiver une noisette ?

Il te suffit d’aller tester l’interface du noizetier, puisque l’objet du noizetier est justement de fournir cette interface. Pour chaque page et chaque bloc, tu peux choisir d’insérer ou non telle noisette, la paramétrer, modifier l’ordre des noisettes, etc.

Cordialement

Joseph

Joseph,

Je suis tout à fait d’accord avec toi sur le concept de noisettes.
Sarka-SPIP a un historique important qui parfois d’ailleurs me désole quand je vois le peu de cas qu’on en fait quand on développe des nouveaux concepts dont certains embryons existaient déjà… Mais c’est une autre histoire.

Donc oui, les noisettes sont à distinguer des inclusions et je vais rapidement renommer le répertoire de Sarka-SPIP pour commencer la distinction.
Je cherchais seulement à bien comprendre si les noisettes pouvaient faire appel à des inclusions, ce que tu as confirmé.

J’ai essayé rapidement Aveline et la config noisetier ça me parait tout à fait en ligne avec les attentes des utilisateurs. Par contre, autant je pense que les briques de bases doivent être dans le noisetier autant je suis pas certain que la page de configuration doive être forcément dans le noisetier (sauf par défaut) mais c’est un détail.

Concernant la bibliothèque de noisettes, je me suis mal fait comprendre: non je ne dis pas que le noisetier doit la porter bien au contraire, le noisetier n’est que le moteur du mécanisme. Mais ma question était plus lié au nommage et au risque de duplication. Mais là aussi c’est du détail, a voir à l’usage. J’ai déjà prévu que certains plugins fournissent des noisettes liés à leur fonctionnalité comme Rainette ou SPIPer Ipsum qui fournissent déjà des pages ZPIP.

++
Eric

Le 20 mars 10 à 14:50, Joseph LARMARANGE a écrit :

Le 20 mars 2010 12:32, Gildas Cotomale <gildas.cotomale@gmail.com> a écrit :

C’est que sarkaspip a une longue histoire pré-Z… son répertoire
noisettes joue un peu le même rôle que l’habituel répertoire « include »
ou « inc » (je grossi un peu… mais pour être plus précis, c’est un
mélange de « contenus » et « noisettes » qui sont inclus par les pages, et
c’est assez efficace…)

[…]

Ranger des noisettes dans des sous-répertoires correspondrait à quelle
logique ? Quelle serait la convention de rangement ?

ce serait la même logique que les plugins ou les thèmes : les
noisettes peuvent avoir des fichiers annexes qu’il convient de
regrouper et de distribuer ensemble (c’est intéressant quand la
noisette n’est pas distribuée avec un plugin ou un squelette)

Peut-être me faut-il clarifier ce qui est appelé une noisette au sens du noizetier. Peut-être le nom est-il mal choisi.
Il est vrai que beaucoup ont coutume d’appeler noisette un morceau de squelette ayant vocation a être inclue / appelée par un ou plusieurs squelettes parents.

Dans le cas du noiZetier, une noisette est un objet spécifique possédant un certain formalisme notamment concernant son nom (voir page-nomnoisette pour une noisette pouvant aller sur n’importe quelle page, article-nomnoisette pour une noisette pouvant aller uniquement sur une page artice ou une composition de la page article) et un descriptif au format xml précisant un nom, une description une icone et des paramètres de configuration.

Une telle noisette au sens du noizetier est située dans un répertoire noisettes/ tout comme les modèles sont dans un sous-répertoire modeles, les entrées de menu dans un sous-répertoire menus/, les saisies dans saisies/ et les formulaires dans formulaires/.

Le noizetier recherche donc uniquement les fichier .html présent à la racine de noisettes/ et accompagnés d’un fichier xml. (via la fonction find_in_path)

De fait, la logique des noisettes selon le noizetier, correspond plus à la logique des saisies et des entrées de menus (pouvant être fournies par différents plugins) car la logique des plugins et des thèmes.

Cela ne signifie pas qu’une noisette ne peut pas avoir ses propres inclusions, ces dernières pouvant être dans noisettes/ un sous-répertoire de noisettes ou ailleurs.

Disons que le noizetier pousse à distinguer les inclusions gérées directement par les squelettes appelant des « noisettes » (au sens qu’il lui donne) qui sont des objets manipulables par l’interface de gestion du noizetier et dont le noizetier gère l’insertion dans les pages. L’interface de gestion du noizetier est prévue pour être utilisable par une personne n’y connaissant strictement rien au code.

Il s’agit donc d’une brique dans la personnalisation des contenus tout comme le plugin menus permet de gérer des menus via une interface.

Est-ce l’usage du mot noisette qui pose problème, ce dernier ayant déjà une histoire dans l’univers spip ?