[SPIP Zone] A propos d'ACS et d'un gestionnaire de noisettes en général

Bonjour à tous,
c'est avec un grand plaisir que je viens de voir sortir ACS et le début de discussion sur la liste sur la gestion des noisettes vient une interface dans l'espace privée.
Vous l'aurez constaté, le projet du noisetier est au point mort. je viens de passer une année intense d'un point de vue professionnel et je n'ai eu absolument pas le temps de m'y consacrer (surtt que je suis lent à faire vu que je ne suis pas développeur).
A défaut d'avoir codé, je me permets ici quelques remarques sur ce qui me semble important des fonctionnalités que devrait incorporé un plugin de gestion de noisettes (ou de composants).

Il me semble que pour éviter de multiples projets en parallèle, il serait pertinent d'aboutir à poser un modèle de ce que doit être une noisette. Il me semble que ce modèle doit permettre de gérer les points suivants :
-* gestion des différentes traductions et de la description de l'espace privé ;
-* précision des différents paramètres concernant le contenu affiché par la noisette et également ceux des css propres à la noisette ;
-* préciser les variables d'environnement (obligatoires et optionnelles) nécessaires au fonctionnement d'une noisette le cas échéant (une noisette liste des 10 derniers articles n'en a pas besoin, mais une noisette forum d'un article nécessite un id_article) ;
-* précise les mots clés techniques nécessaires au fonctionnement de la noisette (une noisette articles mis en avant car taggés par le mot clé en-avant nécessite que ce mot clé existe). Outre le nom du mot clé, il faut précisé sur quel type d'objet il porte ;
-* il doit y avoir un nommage de boîte, classe CSS le plus uniforme possible entre les noisettes afin que différents squelettes puissent les utiliser ;
-* une compatibilité crayon ;
-* un numéro de version de chaque noisette pour pouvoir gérer une mise à jour de ces dernières (je mets à jour le plugin, certaines noisettes proposent désormais de nouveaux paramètres, le plugin peut alors véirifier les noisettes mises à jours et rajouter les nouveaux paramètres éventuels) ;
-* préciser les plugins (ou la version du plugin) nécessaires au fonctionnement de la noisette le cas échéant et la version de spip requise au besoin(par exemple une noisette liste des dernières newsletters envoyées ne devraient pouvoir être installées que si spip-liste est activé, pareil pour une noisette prochain évènement ayant besoin de spip_agenda) ;
-* les insertions dans l'entête html nécessaires si la noisette est présente dans la page le cas échéant (par exemple une noisette nécessitant un javascript donné...) ;
-* et éventuellement, le cas échéant, les squelettes compatibles ou incompatibles avec cette noisette.

Le modèle de noisettes présents dans ACS me semble, à première vue (son auteur peut me corriger si je me trompe) comprendre un ensemble important de ces points mais pas tous pour le moment. Il me semble qu'il suffirait juste d'ajouter quelques champs au xml de description de la noisette (appelée composant dans ACS si je ne m'abuse. Je continuerai à user du terme noisette ici néanmoins).

Dans ACS, les noisettes sont dans un sous-répertoire composants du modèle de squelette. Il semble alors qu'une noisette est destinée à un seul squelette. Il me semblerait plus pertinent que tous les noisettes soient dans un même répertoire, utilisables ainsi par tous les squelettes (avec la précision des squelettes incompatibles dans le xml le cas échéant). Par ailleurs, il faudrait pouvoir déclarer ses propres noisettes dans squelettes et pouvoir aussi en distribuer dans d'autres plugins à terme (en effet, si un modèle de noisette se généralise, on pourrait par exemple envisager que le plugin agenda soit livré avec des noisettes compatibles prêtes à l'emploi). dans le noisetier, on considérait comme noisettes toutes celles qui sont dans un sous-répertoire noisettes, qu'il soit dans n'importe quel plugin ou bien dans le répertoire squelettes. On peut choisir un autre nom de répertoire, mais une uniformisation sur ce point me semble important. Dans ACS, je ne sais pas dans quelle mesure on peut déclarer des noisettes ailleurs mais je suppose que son auteur pourra préciser ce point.

Dans ACS, certains composants fournissent du contenu (edito, bannière, rubnav...) alors que d'autres sont en réalité des contenus de composants (colonne1, colonne2, entete...). Par ailleurs, ces conteneurs ont un nombre de contenu limité.
Il me semble que ces éléments doivent être clairement séparés pour l'utilisateur final. Dans le noisetier, nous parlions de noisettes et de zones. Les zones étant définis par le squelette utilisé. Un squelette peut ainsi utilisé une colonne de gauche, un entete, un corps et un pieds de page, tandis qu'un autre squelette peut proposer une mise en page en trois colonnes. Dans certains squelettes, toutes les pages n'ont pas les mêmes zones. Par exemple, dans la dist, la page login ne dispose pas d'en-tete ni de pied de page. Il me semble que c'est au squelette de définir les zones disponibles (structure type et pages spécifiques) et au gestionnaire de noisettes de remplir ensuite ces conteneurs avec les différentes noisettes requises, dans le bon ordre et avec les paramètres adéquats. Le système à adopter doit permettre de pouvoir mettre autant de noisettes que voulu dans une zone (sans être limité en nombre) via un système générique.
Si un squelette permet de modifier le nombre de zones (par exemple multiflex où on peut changer la mise en page) à lui alors de permettre cette gestion plus fine.

Les CSS des différents composants d'ACS peuvent être personnalisées de manière très fines ce qui me semblent très intéressants. Il me semblerait un plus qu'il y ait dans les noisettes également une personnalisation des contenus (par exemple, choisir dans une noisette liste des derniers articles le nombre d'articles à afficher).
Par ailleurs, cela rejoint le point sur la problématique de trouver un nommage CSS relativement standard, il faudrait arriver à ce que les noisettes aient un habillage par défaut dépendant de la css générique du squelette (cette CSS pouvant par exemple définir que les éléments de type h3 dans la colonne de droite sont en gras et en vert). La personnalisation des CSS pour chaque composant ne serait alors qu'une surcharge de cette CSS standard pour un composant particulier. On aurait ainsi à la fois un habillage par défaut et une possibilité de personnalisation. (Il est probable qu'ACS propose déjà cela mais il me semble que l'habillage par défaut soit très limité). De fait, un petit lien 'Effacer l'habillage CSS personnalisé' dans la page de gestion d'un composant me semblerait un petit plus.

À partir d'un ensemble de noisettes, on peut envisager différents modèles de sites ou distributions. Une distribution type journal ou bien type blog, ou bien minimale. À terme, il me semble qu'il serait pertinent qu'un système de gestion des noisettes puissent gérer des fichiers de distribution (probalement un xml) spécifiant une configuration particulière des noisettes. Cela faciliterait l'installation. De plus, on pourrait alors sauvegarder sa propre distribution.

J'ai l'impression que pour le moment ACS n'installe pas les mots clés techniques nécessaires à certaines noisettes. À terme, un gestionnaire de noisettes devrait pouvoir installer (et éventuellement désinstaller) les mots clés techniques nécessaires aux noisettes utilisées sur le site. Par ailleurs, comme SPIP ne gèrent pas pour le moment les mots-clés techniques, il est nécessaire d'utiliser une seule et même manière de les filtrer sur le site public (certains squelettes utilisent par exemple les caractères ~ ou _ pour préfixer le nom des groupes de mots clés techniques).

Concernant la gestion des droits avancés d'accès et des droits d'administrations, il me semble que cela n'a pas sa place dans un tel plugin mais devrait faire l'objet de plugins séparés. La fait d'avoir une gestion fine des droits d'accès dans l'espace privé devrait être intégré au plugin autorité. Concernant les droits de gérer le plugin, il existe le statut webmaster dorénavant avec autorité (statut encore plus large que admin général). Par ailleurs, la restriction de certaines pages de l'espace privé à certains utilisateurs n'est pas spécifique à ACS. Ces différentes fonctionnalités auraient toutes leur place dans Autorité, on pourrait ainsi les utiliser sans utiliser ACS. Par ailleurs, si on considère qu'il est vraiment fondamental pour ACS d'utiliser parallèlement une gestion avancée de droits, alors, on peut rajouter un nécessite autorité.
Concernant la restriction d'accès, il me semble que le filtrage réalisé par ACS est un filtrage objet par objet par mots-clés. Cela pour moi devrait faire l'objet d'un plugin séparé utilisant une surcharge des boucles SPIP. Dans ACS, cela se fait via des éléments dans le squelettes, ce qui fait déjà qu'on a une page article et inc_article (ca complique le système pour l'utilisateur néofite) mais de plus c'est une contrainte forte sur la rédaction de squelette. Le filtrage directement dans les boucles SPIP me semble plus pertinent. Une restriction objet par objet est un fonctionnement différent qu'une restriction par branche. Et donc cela peut faire l'objet d'un plugin distinct de accès_restreint (même si probablement une partie du code sera commune).

Le système doit également être suffisamment générique pour que n'importe quel contenu puisse être diffusé via une noisette (et même tous les contenus de la page). Ainsi, même l'ensemble Titre/Texte/note d'un article doit pouvoir faire l'objet d'une noisette, ainsi que la liste des documents joints, le forum, la pétition et les mots clés attachés. je peux ainsi choisir où je place ces différents éléments dans la page. par exemple, les mots clés attachés après l'arbre des rubriques mais avant le texte, les docs joints dans la colonne de gauche et la pétition avant le forum etc. Or, pour pouvoir afficher n'importe quelle noisette, il faut pouvoir lui passer les variables d'environnement dont elle a besoin. C'est souvent un des noeuds du problème lorsque l'on fait une inclusion. C'est pourquoi il importe que les variables d'environnement d'une noisette soient précisées dans son xml. Une solution consiste à passer à chaque noisette l'ensemble des variables d'environnement. Mais cela multiplie le cache. Dans BliP, seul était passé l'id en cours. mais dans ce cas là, impossible d'utiliser une pagination. Dans le noisetier, seuls les variables d'environnement propres à une noisette lui sont passées mais la bidouille utilisée n'est probablement pas la meilleure manière de faire.
J'évoquais précédemment la notion de variable d'environnement obligatoire et optionnelle. Prenons un exemple, une noisette affichant la liste des signataires d'une pétition avec une pagination de 100 signataires. Il faut impérativement à cette noisette un id_article afin de renvoyer un résultat. Il s'agit alors d'une variable d'environnement obligatoire et le système ne devrait autorisé l'installation de cette noisette uniquement sur une page fournissant un id_article. Mais cette noisette nécessite également une autre variable d'environnement (celle de la pagination) ou bien une variable de tri qui serait passée en URL. ces deux variables doivent être transmises à la noisette si elles sont présentes mais ne sont pas obligatoires, donc optionnelles.
Je ne sais pas pour le moment comment cela est gérer dans ACS. Il me semble que chaque noisette dispose d'un squelette d'appel qui lui passe uniquement les variables d'environnement qui lui sont nécessaires ainsi que les éléments de configuration en var d'environnement. Mais cela est à confirmer par son auteur. Néanmoins, le choix retenu pour le squelette de démonstration cat est de ne pas gérer tout le contenu par des noisettes puisqu'une partie est inclue directement dans les squelettes.

L'exemple précédent renvoie à la notion de page. Il me semble que cette dernière mérite d'être creusée et que l'on peut distinguer page et squelette. Il peut y avoir de nombreux squelettes et inclusions d'un point de vue technique, pour un utilisateur lambda il n'est pas forcément nécessaire de connaître toutes ces inclusions. Je vais afficher un élément sur une page article ou une page sommaire ou bien sur toutes les pages. Autrement dit, il faut pouvoir spécifier à une noisette si on l'affiche sur toutes les pages, sur certaines pages uniquement, ou sur toutes les pages sauf certaines. les pages doivent avoir leur propre définition qui précise notamment les variables d'environnement qu'elles délivrent systématiquement, la page article ayant toujours un id_article. Dès lors, une noisette ayant un id_article obligatoire ne pourra être installée que sur ces pages, alors qu'une noisette sans var obligatoire pourra être installée sur toutes les pages.
La définition des pages ne doit pas dépendre me semble-t-il des squelettes, ces derniers ne devant définir que les zones. Et une page devrait pouvoir être définies par d'autres plugins. Par exemple, supposons que j'installe le plugin spip-listes, alors ce plugin devrait pouvoir à la fois livrer des noisettes spécifiques reconnues par le système mais également pouvoir définir une page courier et liste_des_courriers que le système intégrerait. Bien sur, on doit pouvoir aussi définir des pages personnels via son répertoire squelette.
De même, rien n'interdit d'envisager des pages sépcifiques, par exemple pour une rubrique forum. Pour cela je renvoie à la notion de page décrite dans le projet du noisetier. La manière de les déclarer y est probablement pas très bonne. Par contre, il me semble que le concept mérite réflexion.

Dernier point, qui est probablement un point de détail. Il me semble qu'il n'est pas possible d'afficher avec ACS une même noisette à deux endroits du site mais avec deux configurations différentes. Cela peut certes sembler mineur, mais un système le plus générique possible devrait il permettre une double installation d'une même noisette ? (besoin qui peut se faire sentir).

Voilà, je sais, vous allez dire que je suis bavard et que je ne code pas beaucoup. Vous avez raison. Reste que je suis impressionné par le travail réalisé par ACS, bien qu'il me semble qu'il y ait encore un peu de chemin à parcourir vers le système le plus générique possible d'une gestion du contenus totalement sous forme de noisette.

J'espère au moins que ces différents éléments alimenteront le débat. Il s'agit essentiellement d'une discussion sur les concepts et fonctionnalités que devraient intégrer un tel outil dans l'idéal, non d'un questionnement sur la manière manière de coder tout cela.

Bien cordialement.

Joseph

Hello,

Beaucoup de questions, d'idées, et de de sujets de débats dans le mail de
Joseph. Pour ne pas faire trop long, j'ai regroupé. Dans ce qui suit,
j'utilise les termes "noisettes" pour désigner des inclusions en général, et
le terme "composants" pour les "noisettes" ACS, des noisettes avec interface
d'admin, en quelque sorte.

"Il me semble que ce modèle doit permettre de gérer les points suivants :"

-* gestion des différentes traductions et de la description de l'espace
privé ;

- dans ACS, chaque composant possède ses traductions pour l'espace public
dans un sous-dossier lang (comme spip), et ses traductions pour l'espace
privé dans un dossier ecrire/lang. Les fichiers de traductions s'appellent
respectivement <moncomposant>_fr.php et <moncomposant>_admin_fr.php
Ils réutilent autant que faire se peut les traductions déjà faites. Il est
prévu d'intégrer à ACS un éditeur pour ses fichiers de traductions (basé sur
crayons dans l'espace privé)

-* précision des différents paramètres concernant le contenu affiché par
la noisette et également ceux des css propres à la noisette ;

- à préciser ?

-* préciser les variables d'environnement (obligatoires et optionnelles)
nécessaires au fonctionnement d'une noisette le cas échéant (une
noisette liste des 10 derniers articles n'en a pas besoin, mais une
noisette forum d'un article nécessite un id_article) ;

- ce point doit être transparent pour l'utilisateur final : on devrait pouvoir
se contenter de passer env pour tout récupérer (tests à terminer)

-* précise les mots clés techniques nécessaires au fonctionnement de la
noisette (une noisette articles mis en avant car taggés par le mot clé
en-avant nécessite que ce mot clé existe). Outre le nom du mot clé, il
faut précisé sur quel type d'objet il porte ;

- les mots-clés peuvent dépendre de la langue : ce n'est pas à intégrer à une
noisette si elle doit être multilingue. ACS définit certains mots-clés à
partir de ses fichiers de traductions: ce n'est donc pas codé "en dur".

-* il doit y avoir un nommage de boîte, classe CSS le plus uniforme
possible entre les noisettes afin que différents squelettes puissent les
utiliser ;

- chaque "noisette" doit avoir son propre espace de nommage: une façon simple
de s'en assurer est d'encapsuler chaque composant dans un DIV ayant pour
classe son nom canonique.

-* une compatibilité crayon ;

- s'il s'agit de rajouter des balises #EDIT{}, rien de plus simple. ACS
intègre en plus un genre de "crayons" spéciaux, les "pinceaux", qui sont des
éditeurs des composants ACS depuis la partie publique : presque wysywig ! :wink:
Un bon "noisetier" doit offrir des crayons spécifiques pour les objets qu'il
ajoute, pour se dire "compatible crayons".

-* un numéro de version de chaque noisette pour pouvoir gérer une mise à
jour de ces dernières (je mets à jour le plugin, certaines noisettes
proposent désormais de nouveaux paramètres, le plugin peut alors
véirifier les noisettes mises à jours et rajouter les nouveaux
paramètres éventuels) ;

- fait dans ACS.

-* préciser les plugins (ou la version du plugin) nécessaires au
fonctionnement de la noisette le cas échéant et la version de spip
requise au besoin(par exemple une noisette liste des dernières
newsletters envoyées ne devraient pouvoir être installées que si
spip-liste est activé, pareil pour une noisette prochain évènement ayant
besoin de spip_agenda) ;

- fait pour spip et pour ACS, dans ACS. Mais il faudrait modifier ça pour
effectivement tenir compte des versions de plugins.
Proposition : deux nouvelles balises xml pour la définition des composants:
* tag <plugins></plugins>, qui pourrait contenir pour chaque plugin le nom du
plugin pour ceux requis, le nom du plugin précédé de ! pour ceux à éviter, et
éventuellement un test de version. Problème : le versionnement des plugins
n'est pas normalisé : c'est une source d'emmerdes si on en tient compte lors
des installs: des plugins compatibles pourraient etre détectés incompatibles
rien que parce que leur numero de version a changé.
* tag <meta>nom_variable_meta test valeur</meta> pour faire dépendre un
composant de la configuration du site.
Actuellement, dans ACS, tout ceci est testé par une balise <optionnel>, qui
regroupe trop de choses (plugins, meta, et oui/non). J'attend le retour à ce
mail pour faire evoluer ça.

-* les insertions dans l'entête html nécessaires si la noisette est
présente dans la page le cas échéant (par exemple une noisette
nécessitant un javascript donné...) ;

- dans ACS (version dev), les insertions de css et de javascripts des
composants sont gérées de façon plus simple qu'en 0.3: chaque composant peut
intégrer une css (qui peut contenir des inclusions), et un
javascript "maitre", qui peut lui aussi appeller des inclusions. L'ordre de
chargement des javascripts étant important, j'ai mis au point ce système pour
qu'ACS puisse ensuite fabriquer un gros javascript complet et bien ordonné,
qui est mis en cache par SPIP.

-* et éventuellement, le cas échéant, les squelettes compatibles ou
incompatibles avec cette noisette.

- ceci pouvant evoluer vite, c difficile à maintenir, et ptet pas à intégrer
dans du code source ...

Le modèle de noisettes présents dans ACS me semble, à première vue (son
auteur peut me corriger si je me trompe) comprendre un ensemble
important de ces points mais pas tous pour le moment. Il me semble qu'il
suffirait juste d'ajouter quelques champs au xml de description de la
noisette (appelée composant dans ACS si je ne m'abuse.

- je suis très intéressé par des propositions sur les champs à ajouter au xml

Dans ACS, les noisettes sont dans un sous-répertoire composants du
modèle de squelette. Il semble alors qu'une noisette est destinée à un
seul squelette. Il me semblerait plus pertinent que tous les noisettes
soient dans un même répertoire, utilisables ainsi par tous les
squelettes (avec la précision des squelettes incompatibles dans le xml
le cas échéant). Par ailleurs, il faudrait pouvoir déclarer ses propres
noisettes dans squelettes et pouvoir aussi en distribuer dans d'autres
plugins à terme (en effet, si un modèle de noisette se généralise, on
pourrait par exemple envisager que le plugin agenda soit livré avec des
noisettes compatibles prêtes à l'emploi). dans le noisetier, on
considérait comme noisettes toutes celles qui sont dans un
sous-répertoire noisettes, qu'il soit dans n'importe quel plugin ou bien
dans le répertoire squelettes. On peut choisir un autre nom de
répertoire, mais une uniformisation sur ce point me semble important.
Dans ACS, je ne sais pas dans quelle mesure on peut déclarer des
noisettes ailleurs mais je suppose que son auteur pourra préciser ce point.

- il faut expliquer un peu l'usage avancé d'ACS : ACS utiliise des "modèles
ACS", à savoir des jeux de squelettes complets intégrant leurs composants, et
aucun autre composant inutile. Ne pas inclure les composants aux squelettes
serait une erreur qui conduirait à faire des "noisettes" "à vocation
universelle" et à usage en fait limité à son squelette conteneur. L'approche
d'ACS permet à ses composants d'etre inclus qu'ACS soit installé ou pas,
puisqu'il suffit d'un INCLURE. Ce qui ne serait pas possible en allant les
ranger ailleurs.
ACS utilise un mécanisme d'override particulier : supposons que vous ayez un
dossier de squelettes mes_squelettes, et un dossier de noisettes et de
composants personnalisés appellé mon_noisetier_ACS, il faut aller les
déclarer dans l'interface d'admin d'ACS, comme squelettes en surcharge d'ACS.
En effet, ACS permet de créer des éditeurs pour des "noisettes" issues de
plugins: il faut donc qu'ACS puisse surcharger les plugins pour les rendre
éditables. Enfin, on doit aussi utiliser les mécanismes standard de la dist.
En résumé, avec l'exemple ci-dessus, l'ordre d'override est:
mes_squelettes > mon_noisetier_ACS > modele_ACS_actif > plugins > dist
Dans cet exemple, ACS prend automatiquement en compte les composants
personnalisés définis dans les deux squelettes en surcharge.

Dans ACS, certains composants fournissent du contenu (edito, bannière,
rubnav...) alors que d'autres sont en réalité des contenus de composants
(colonne1, colonne2, entete...). Par ailleurs, ces conteneurs ont un
nombre de contenu limité.
Il me semble que ces éléments doivent être clairement séparés pour
l'utilisateur final. Dans le noisetier, nous parlions de noisettes et de
zones. Les zones étant définis par le squelette utilisé. Un squelette
peut ainsi utilisé une colonne de gauche, un entete, un corps et un
pieds de page, tandis qu'un autre squelette peut proposer une mise en
page en trois colonnes. Dans certains squelettes, toutes les pages n'ont
pas les mêmes zones. Par exemple, dans la dist, la page login ne dispose
pas d'en-tete ni de pied de page. Il me semble que c'est au squelette de
définir les zones disponibles (structure type et pages spécifiques) et
au gestionnaire de noisettes de remplir ensuite ces conteneurs avec les
différentes noisettes requises, dans le bon ordre et avec les paramètres
adéquats. Le système à adopter doit permettre de pouvoir mettre autant
de noisettes que voulu dans une zone (sans être limité en nombre) via un
système générique.
Si un squelette permet de modifier le nombre de zones (par exemple
multiflex où on peut changer la mise en page) à lui alors de permettre
cette gestion plus fine.

- il me semble au contraire particulièrement important qu'un conteneur soit un
composant comme les autres. C'est bien plus souple à l'usage. Ainsi, on peut
avec ACS faire un seul composant pour tout un squelette, ou au contraire
découper tout en petites noisettes bien modulaires. Au choix.
L'API d'ACS permet de considérer les pages comme des composants, en
l'occurence des composants conteneurs. A terme, celà permet d'imaginer une
edition "wysiwyg" des pages.
Ensuite, c'est au développeur de choisir la granularité de ses composants
selon son squelette: l'API ne doit pas imposer ça.

Les CSS des différents composants d'ACS peuvent être personnalisées de
manière très fines ce qui me semblent très intéressants. Il me
semblerait un plus qu'il y ait dans les noisettes également une
personnalisation des contenus (par exemple, choisir dans une noisette
liste des derniers articles le nombre d'articles à afficher).

- existe dans ACS (exemple : nb de morceaux ds la playliste)

Par ailleurs, cela rejoint le point sur la problématique de trouver un
nommage CSS relativement standard, il faudrait arriver à ce que les
noisettes aient un habillage par défaut dépendant de la css générique du
squelette (cette CSS pouvant par exemple définir que les éléments de
type h3 dans la colonne de droite sont en gras et en vert). La
personnalisation des CSS pour chaque composant ne serait alors qu'une
surcharge de cette CSS standard pour un composant particulier. On aurait
ainsi à la fois un habillage par défaut et une possibilité de
personnalisation.

- c'est un point à affiner : au début, ACS faisait ça, mais ça pouvait poser
problème lorsque l'on voulait personnaliser un composant en supprimant une
valeur héritée par défaut.

De fait, un petit
lien 'Effacer l'habillage CSS personnalisé' dans la page de gestion d'un
composant me semblerait un petit plus.

- bonne idée ! En attendant, la page de gestion du plugin permettra de
réinitialiser les variables pour TOUS les composants.

À partir d'un ensemble de noisettes, on peut envisager différents
modèles de sites ou distributions. Une distribution type journal ou bien
type blog, ou bien minimale. À terme, il me semble qu'il serait
pertinent qu'un système de gestion des noisettes puissent gérer des
fichiers de distribution (probalement un xml) spécifiant une
configuration particulière des noisettes. Cela faciliterait
l'installation. De plus, on pourrait alors sauvegarder sa propre
distribution.

- ce qui est prévu dans ACS, c'est de gérer des styles: la sauvegarde se fera
sous forme de tableau de variables sérialisées, ET d'un système de sauvegarde
des images associées à tel ou tel style. Le même système servira à
initialiser ACS à l'installation (actuellement il faut aller valider chaque
composant une fois pour l'initialiser)

J'ai l'impression que pour le moment ACS n'installe pas les mots clés
techniques nécessaires à certaines noisettes. À terme, un gestionnaire
de noisettes devrait pouvoir installer (et éventuellement désinstaller)
les mots clés techniques nécessaires aux noisettes utilisées sur le
site. Par ailleurs, comme SPIP ne gèrent pas pour le moment les
mots-clés techniques, il est nécessaire d'utiliser une seule et même
manière de les filtrer sur le site public (certains squelettes utilisent
par exemple les caractères ~ ou _ pour préfixer le nom des groupes de
mots clés techniques).

- Je partage ce point de vue. J'utilise _ comme préfixe. Pour faire générique,
il faut toutefois tenir compte de la langue du site. Il faudra intégrer à ACS
une install automatisée de mots clés technique multilingues dans l'esprit de
ce que dit Joseph (déjà prévu, mais pas codé !)

Concernant la gestion des droits avancés d'accès et des droits
d'administrations, il me semble que cela n'a pas sa place dans un tel
plugin mais devrait faire l'objet de plugins séparés. La fait d'avoir
une gestion fine des droits d'accès dans l'espace privé devrait être
intégré au plugin autorité. Concernant les droits de gérer le plugin, il
existe le statut webmaster dorénavant avec autorité (statut encore plus
large que admin général). Par ailleurs, la restriction de certaines
pages de l'espace privé à certains utilisateurs n'est pas spécifique à
ACS. Ces différentes fonctionnalités auraient toutes leur place dans
Autorité, on pourrait ainsi les utiliser sans utiliser ACS. Par
ailleurs, si on considère qu'il est vraiment fondamental pour ACS
d'utiliser parallèlement une gestion avancée de droits, alors, on peut
rajouter un nécessite autorité.

- en fait, ACS a impérativement besoin de sécurité, qu'elle soit native ou
vienne du plugin autorite. En le developpant, il s'est avéré que le système
de gestion de droits d'ACS pouvait servir à d'autres usages facilement.
Mais si quelqu'un porte ce système dans autorite, ou s'il est intégré au
noyau, la gestion de droits sera retirée d'ACS.

Concernant la restriction d'accès, il me semble que le filtrage réalisé
par ACS est un filtrage objet par objet par mots-clés. Cela pour moi
devrait faire l'objet d'un plugin séparé utilisant une surcharge des
boucles SPIP. Dans ACS, cela se fait via des éléments dans le
squelettes, ce qui fait déjà qu'on a une page article et inc_article (ca
complique le système pour l'utilisateur néofite) mais de plus c'est une
contrainte forte sur la rédaction de squelette. Le filtrage directement
dans les boucles SPIP me semble plus pertinent. Une restriction objet
par objet est un fonctionnement différent qu'une restriction par
branche. Et donc cela peut faire l'objet d'un plugin distinct de
accès_restreint (même si probablement une partie du code sera commune).

- d'accord avec l'idée. Néanmoins, il faudra que de tels plugins passent des
benchmarks, car acces restreint "fait tomber n'importe quel serveur de son
rack", comme disait Fil. Les boucles surchargées filtrées évoquées risquent
de ne pas etre simples à coder, mais si quelqu'un y parvient sans ralentir
SPIP, on adopte !

Le système doit également être suffisamment générique pour que n'importe
quel contenu puisse être diffusé via une noisette (et même tous les
contenus de la page). Ainsi, même l'ensemble Titre/Texte/note d'un
article doit pouvoir faire l'objet d'une noisette, ainsi que la liste
des documents joints, le forum, la pétition et les mots clés attachés.
je peux ainsi choisir où je place ces différents éléments dans la page.
par exemple, les mots clés attachés après l'arbre des rubriques mais
avant le texte, les docs joints dans la colonne de gauche et la pétition
avant le forum etc. Or, pour pouvoir afficher n'importe quelle noisette,
il faut pouvoir lui passer les variables d'environnement dont elle a
besoin. C'est souvent un des noeuds du problème lorsque l'on fait une
inclusion. C'est pourquoi il importe que les variables d'environnement
d'une noisette soient précisées dans son xml. Une solution consiste à
passer à chaque noisette l'ensemble des variables d'environnement. Mais
cela multiplie le cache. Dans BliP, seul était passé l'id en cours. mais
dans ce cas là, impossible d'utiliser une pagination. Dans le noisetier,
seuls les variables d'environnement propres à une noisette lui sont
passées mais la bidouille utilisée n'est probablement pas la meilleure
manière de faire.
J'évoquais précédemment la notion de variable d'environnement
obligatoire et optionnelle. Prenons un exemple, une noisette affichant
la liste des signataires d'une pétition avec une pagination de 100
signataires. Il faut impérativement à cette noisette un id_article afin
de renvoyer un résultat. Il s'agit alors d'une variable d'environnement
obligatoire et le système ne devrait autorisé l'installation de cette
noisette uniquement sur une page fournissant un id_article. Mais cette
noisette nécessite également une autre variable d'environnement (celle
de la pagination) ou bien une variable de tri qui serait passée en URL.
ces deux variables doivent être transmises à la noisette si elles sont
présentes mais ne sont pas obligatoires, donc optionnelles.
Je ne sais pas pour le moment comment cela est gérer dans ACS. Il me
semble que chaque noisette dispose d'un squelette d'appel qui lui passe
uniquement les variables d'environnement qui lui sont nécessaires ainsi
que les éléments de configuration en var d'environnement. Mais cela est
à confirmer par son auteur.

- l'idée-clé serait d'utiliser env partout. Si ça ne suffit pas, faudra
trouver autre chose, car Joseph a bien cerné le pb.

Néanmoins, le choix retenu pour le squelette
de démonstration cat est de ne pas gérer tout le contenu par des
noisettes puisqu'une partie est inclue directement dans les squelettes.

- ce n'est pas un travail terminé. Il est même dans un
état "intermédiaire" :wink:

L'exemple précédent renvoie à la notion de page. Il me semble que cette
dernière mérite d'être creusée et que l'on peut distinguer page et
squelette. Il peut y avoir de nombreux squelettes et inclusions d'un
point de vue technique, pour un utilisateur lambda il n'est pas
forcément nécessaire de connaître toutes ces inclusions. Je vais
afficher un élément sur une page article ou une page sommaire ou bien
sur toutes les pages. Autrement dit, il faut pouvoir spécifier à une
noisette si on l'affiche sur toutes les pages, sur certaines pages
uniquement, ou sur toutes les pages sauf certaines.

- le modèle Cat esquisse vaguement ça avec la notion de composants optionnels
(col1 et col3). mais ça reste à perfectionner comme dit ci-dessus.

les pages doivent
avoir leur propre définition qui précise notamment les variables
d'environnement qu'elles délivrent systématiquement, la page article
ayant toujours un id_article. Dès lors, une noisette ayant un id_article
obligatoire ne pourra être installée que sur ces pages, alors qu'une
noisette sans var obligatoire pourra être installée sur toutes les pages.

- dans le squelette Cat d'ACS, le problème ne se pose pas, parce que les
boucles sont elles-mêmes des sous-composants : on n'a donc pas ce pb. L'idée
est bonne mais pour etre générique le mieux me semble etre d'aller simplement
vérifier dans le code source si c ok, sans rajouter de définition de
metadonnées de pages.

La définition des pages ne doit pas dépendre me semble-t-il des
squelettes, ces derniers ne devant définir que les zones. Et une page
devrait pouvoir être définies par d'autres plugins. Par exemple,
supposons que j'installe le plugin spip-listes, alors ce plugin devrait
pouvoir à la fois livrer des noisettes spécifiques reconnues par le
système mais également pouvoir définir une page courier et
liste_des_courriers que le système intégrerait. Bien sur, on doit
pouvoir aussi définir des pages personnels via son répertoire squelette.
De même, rien n'interdit d'envisager des pages sépcifiques, par exemple
pour une rubrique forum. Pour cela je renvoie à la notion de page
décrite dans le projet du noisetier. La manière de les déclarer y est
probablement pas très bonne. Par contre, il me semble que le concept
mérite réflexion.

- le concept de pages dans le noisetier est extremement intéressant.

Dernier point, qui est probablement un point de détail. Il me semble
qu'il n'est pas possible d'afficher avec ACS une même noisette à deux
endroits du site mais avec deux configurations différentes. Cela peut
certes sembler mineur, mais un système le plus générique possible
devrait il permettre une double installation d'une même noisette ?
(besoin qui peut se faire sentir).

- ce sera une évolution majeure de versions futures d'ACS : permettre
l'instanciation de composants. Ce n'est pas très difficile à faire, mais il
faudra partout numéroter les composants présents en plusieurs exemplaires.

Voilà, je sais, vous allez dire que je suis bavard et que je ne code pas
beaucoup. Vous avez raison. Reste que je suis impressionné par le
travail réalisé par ACS, bien qu'il me semble qu'il y ait encore un peu
de chemin à parcourir vers le système le plus générique possible d'une
gestion du contenus totalement sous forme de noisette.

- la route est encore longue :wink:

J'espère au moins que ces différents éléments alimenteront le débat. Il
s'agit essentiellement d'une discussion sur les concepts et
fonctionnalités que devraient intégrer un tel outil dans l'idéal, non
d'un questionnement sur la manière manière de coder tout cela.

Bien cordialement.

Joseph

--
Daniel FAIVRE
Expert en géomatique

Joseph a écrit :

Bonjour à tous,
c'est avec un grand plaisir que je viens de voir sortir ACS et le début de discussion sur la liste sur la gestion des noisettes vient une interface dans l'espace privée.

Yavait aussi de jolies recettes aux noisettes dans maguzine.

JL