[spip-dev] 3 systèmes de squelettes, est-ce bien raisonnable ?

Hello

Je réponds au mail de Cédric sur Spip-Zone, qui continue une discussion commencée tous les deux suite à ma découverte tardive de exec_fond ici:
http://trac.rezo.net/trac/spip/changeset/13800
plus ma découverte également tardive d'un certain aspect de CFG, savoir:
http://zone.spip.org/trac/spip-zone/browser/plugins/cfg/inc/cfg_formulaire.php

Ces 2 bouts de code n'implémentent rien moins que des systèmes de squelettes orthogonaux à celui proposé par le noyau de SPIP.
Je suis assez ébahi de ce genre de développement qui de mon point de vue vont à l'encontre du développement collaboratif:
le système de squelette officiel de SPIP a beaucoup d'atouts, quand on tombe sur une limitation il faut essayer de l'améliorer plutôt que de faire un système orthogonal dans son coin, qui aura au moins autant de lacunes que celui développé en commun à l'origine, même si ce ne sont pas les mêmes. Voilà pour le principe.

En pratique, pour la prochaine version de SPIP, savoir une 2.2 qu'il faudrait vite sortir pour rapidement mettre un terme à ces dérives, je me sers de mon besoin de remettre sur pied le plugins Association pour expérimenter un remplacement en douceur de CFG, que j'essaye d'appuyer sur un exec_fond qu'il me paraît indispensable de remettre dans les clous du système de squelettes standard. Ce que j'envoie comme code pour ce plugin ne me satisfait pas nécessairement, je cherche seulement à trouver des solutions génériques pas trop éloignées de l'existant. La RegExp reprise de CFG fait partie de ses insatisfactions. Mais ces envois ont le mérite de laisser tomber les parties les moins convaincantes du code de CFG tout en permettant une certaine compatibilité avec le code des plugins qui comptent sur lui. Rien de plus, mais rien de moins.

Committo,Ergo:Sum

Si CFG n'est pas satisfaisant sur certains points, pourquoi essayer de rester compatible avec lui, plutôt que proposer dans le core une alternative toute neuve et plus satisfaisante ?

Rien ne devrait empêcher les plugins de choisir l'un ou l'autre, avec du coup une migration progressive de CFG vers le mécanisme du core.

Non ?

-Nicolas

Ces 2 bouts de code n'implémentent rien moins que des systèmes de squelettes orthogonaux à celui proposé par le noyau de SPIP.
Je suis assez ébahi de ce genre de développement qui de mon point de vue vont à l'encontre du développement collaboratif:

Je suis assez étonné de cette remarque.

CFG du temps où Toggg était là a fait l'objet de nombreuses discussions toutes publiques. Mettre cette fonctionnalité en plugin était un moyen de tester grandeur nature les propositions et améliorer l'outil dans la réalisation des différents besoins exprimés. Dire que ce n'était pas un développement collaboratif, c'est nier tout ce travail et cette expérience accumulée. Le pourquoi CFG a été réalisé et est maintenu est toujours valable.

le système de squelette officiel de SPIP a beaucoup d'atouts, quand on tombe sur une limitation il faut essayer de l'améliorer plutôt que de faire un système orthogonal dans son coin, qui aura au moins autant de lacunes que celui développé en commun à l'origine, même si ce ne sont pas les mêmes.

Lorsque qu'un besoin éclot, des solutions émergent et la plus pratique à cette instant devient la référence, avec ou sans l'accord du «core» de SPIP.

Il y a des tas d'évolutions possibles pour le Core, si on s'amuse à brider tous les développeurs sous le prétexte qu'on jour, SPIP, nativement aura une API propre pour telle ou telle chose, tout le monde partira : cela fait des années que certaines choses sont demandées et ne sont pas là. Que faire ? Il est évident que certaines solutions provisoires vont durer encore longtemps.

Dire que CFG ou prive/exec/x.html est une surcharge de la syntaxe de SPIP, ce n'est évidemment pas faux. Mais intégrer cela ou intégrer des fichiers .xml ou .yaml mitoyens c'est exactement pareil : c'est aussi en quelque sorte augmenter la syntaxe de SPIP d'une autre manière.

En pratique, pour la prochaine version de SPIP, savoir une 2.2 qu'il faudrait vite sortir pour rapidement mettre un terme à ces dérives,

Cette haute autorité aurait un peu tendance à me chagriner. Il y a toujours le code théorique, et l'utilisation réelle des gens.

Changer d'un coup l'API de spip_meta pour intégrer la solution que tu as pensé pour «Association 2» en demandant de sortir rapidement une version 2.1.1, est-ce du développement collaboratif ? Je me pose des questions alors même qu'il y avait eu ce genre de même réflexions sur CFG en son temps et que faute de consensus et de volonté, tout était resté en stand by.

Je note quelques remarques tout de même au passage sur ce que tu proposes pour Associations :

- Une table spip_meta_$prefixe par plugin est abérant dans 95% des situations de configurations ou on a guère plus que 10 valeurs à configurer. Tout stocker dans spip_meta en vrac ne me convient pas plus. Je trouvais la sérialisation de CFG assez agréable justement en n'ajoutant qu'une entrée par plugin dans spip_meta.

- Un simple file_get_contents() sur la source d'un formulaire capable d'analyser les saisies est tout aussi impossible. Trois exemples :
1) #INCLURE{fond=inc/morceau_de_formulaire}
2) <input type="text" name="#ENV{name}" value="#ENV{value}" /> et
3) <BOUCLEx(RUBRIQUES){racine}><input type="text" name="secteur#ID_SECTEUR" value="#ENV{secteur#ID_SECTEUR}" /></BOUCLEx(RUBRIQUES){racine}>.

Ces trois situations sont impossibles à calculer sans un premier recuperer_fond() sur la source.

Cela est tout aussi vrai si c'est un fichier .xml ou .yaml qui indique quelles sont les saisies à prendre : des saisies qui dépendent d'une boucle ne peuvent difficilement être connues.

Il y a de nombreuses situations de configuration qui vont à un moment se percuter si une API est proposée par le core et comme cela a été pour CFG. Si on veut que ça tienne la route, il y a des choix à faire. Mais dire que remplacer CFG (je ne suis en rien contre, je précise) du jour au lendemain est aussi simple que cela est totalement une illusion à mon avis.

Donc... avant de se presser sur une 2.2 qui corrigerait tout d'un coup par miracle... il est urgent de prendre le temps d'y aller à petit pas, de se poser les bonnes questions et d'être attentif à ce qu'attendent les bidouilleurs du dimanche.

J'apprécie ce regard neuf sur les plugins et leur code, c'est une très bonne chose que tu les découvres tout juste et apportes de nouvelles idées. Mais please, ne casse pas tout sur un coup de tête ^^

Je ne me suis pas toujours bien fait comprendre dans mon dernier mail, je précise certaines choses.

Oui, CFG répondait à plusieurs besoins, c'était très bien qu'il le fasse et sur la plupart des points il a été développé de manière collaborative. En revanche, le fait que Toggg n'a rapidement plus voulu travailler sur le noyau fait qu'il y a 2 points précis sur lesquels le noyau n'a pas profité d'un travail collaboratif autour des besoins de CFG. Ce sont:

1. la sauvegarde des metas du plugins
2. le "exec" correspondant au formulaire de saisies de ces métas.

Sur le point 1, j'ai eu l'idée d'une table des métas par plugin pour résoudre le pb de migration d'un plugin d'un site vers un autre site: on a besoin des tables du plugin PLUS ses metas, mais on ne veut pas des métas qui concerne le noyau de SPIP. Quand bien même il n'y aurait qu'une seule meta, il faut une table à part pouvoir un dump fiable. Ajouté au fait que le "lire_config" de CFG est une fonction d'un coût exhorbitant pour une fonctionnalité se rameneant à lire et affecter une variable, dire que "ne table des meta par plugin est une aberration" me fait franchement rigoler. Si Toggg n'avait pas bouder le noyau, je pense qu'il aurait trouvé cette solution ou une du même genre, et que le noyau se serait ainsi enrichi dès cette époque. C'est dommage, mais pas dramatique. Je précise en outre que je n'ai pas "changeé l'API de spip_meta": c'est une généralisation transparente, et on n'est pas obligé de l'utiliser.

Sur le point 2, CFG a cru bon d'interpréter la balise #REM de manière différente du noyau. Ca je trouve ça plus grave, parce que c'est rajouter de la confusion pour ceux qui débarquent dans l'univers des squelettes. Il n'aurait été pas plus difficile de rajouter qq balises permettant de construire la page visée, en restant dans l'architecture générale de SPIP plutôt que de faire bande à part.

Ce qui tempère la gravité de la chose est que CFG est en dehors du noyau, et il a le mérite d'avoir été discuté et documenté. En revanche j'ai vraiment halluciné quand j'ai découvert exec_fond, car c'est le même principe d'un système de squelette à part, qui pourrait se résoudre par des balises supplémentaires, et qui a été inséré dans le noyau, sans autre doc que le log de son dépot (13800), et sans discussion profonde sur ce qu'il représente comme piste très arbitraire de mise en squelette de l'espace privé, contre laquelle je m'insurge complètement.

La raison pour laquelle je souhaite une sortie rapide d'une version 2.2, ce n'est pas pour imposer un remplaçant à CFG (j'ai bien conscience que je suis loin d'en avoir un) c'est que ce script exec_fond risque de susciter des développements pour lesquels nous seront contraints d'assurer la compatibilité, alors que je pense que sa conception de base est à rejeter hors du noyau. Retirer ce script et sortir une nouvelle version me suffirait rien que pour cette raison. Pour le remplacement de CFG, j'explore plusieurs pistes (y compris celle d'exec_fond, dont je n'ai perçu la gravité qu'en l'explorant justement), ce que je fais pour Association n'est nullement, à l'heure actuelle, un exemple à suivre à 100%, je ne l'ai d'ailleurs jamais dit. Donc je "ne casse pas tout sur un coup de tête" (RIEN n'est cassé) et je n'use pas d'une "haute autorité". Je trouve au contraire que c'est d'avoir introduit dans le noyau un 2e système de squelettes qui est un acte autoritaire.

Pour éviter les polémiques, d'autant que j'ai eu déjà plusieurs échanges avec Cédric où je lui proposais de faire évoluer exec_fond vers une compatibilité avec le système standard, je vais envoyer d'ici qq jours une proposition altervative dans la branche dev. Ca fera une base discussion tangible pour savoir que contiendra la nouvelle version et quand la sortir.

Committo,Ergo:Sum

Toggg n'a rapidement plus voulu travailler sur le noyau fait qu'il y a 2 points précis sur lesquels le noyau n'a pas profité d'un travail collaboratif autour des besoins de CFG. Ce sont:
1. la sauvegarde des metas du plugins
2. le "exec" correspondant au formulaire de saisies de ces métas.

Sur le point 1, j'ai eu l'idée d'une table des métas par plugin pour résoudre le pb de migration d'un plugin d'un site vers un autre site: on a besoin des tables du plugin PLUS ses metas, mais on ne veut pas des métas qui concerne le noyau de SPIP.

C'est un point discutable là aussi. Il y a peu de plugins qui gèrent des éléments éditoriaux pouvant migrer sans avoir l'ensemble de la structure du site, vu que les tables sont généralement liées entre elles et les objets de SPIP comme les auteurs ou les articles. Beaucoup de plugins ajoutent un champ simplement sur une table existante. Comment migres-tu dans ces cas là ? Enfin je n'ai peut-être pas compris ce que tu entends par migration de plugin...

Sur le point 2, CFG a cru bon d'interpréter la balise #REM de manière différente du noyau.

Écriture d'ailleurs obsolète car elle n'était pas suffisante dans tous les cas de figure pour passer des paramètres à l'analyseur de CFG. <!-- param=valeur --> est la règle actuelle, qui permet <!-- param=[(#BALISE|filtre)] --> et d'en extraire, après recuperer_fond, le résultat.

Ca je trouve ça plus grave, parce que c'est rajouter de la confusion pour ceux qui débarquent dans l'univers des squelettes. Il n'aurait été pas plus difficile de rajouter qq balises permettant de construire la page visée, en restant dans l'architecture générale de SPIP plutôt que de faire bande à part.
   

Je ne me rappelle pas de tout cela avec Toggg, je suis arrivé un peu plus tard dans le jeu je pense.

Pour éviter les polémiques, d'autant que j'ai eu déjà plusieurs échanges avec Cédric où je lui proposais de faire évoluer exec_fond vers une compatibilité avec le système standard, je vais envoyer d'ici qq jours une proposition altervative dans la branche dev. Ca fera une base discussion tangible pour savoir que contiendra la nouvelle version et quand la sortir
   

Veux-tu donner quelques lignes de ton idée ? À quelle balise pensais-tu ou comment l'envisages-tu ?

J'espère que tu n'oublieras pas Z dans ta réflexion.
Ainsi que l'indique par exemple le log http://spip.org/notice/23911
c'est une perspective qui séduit.

JLuc

Pour éviter les polémiques, d'autant que j'ai eu déjà plusieurs échanges avec Cédric où je lui proposais de faire évoluer exec_fond vers une compatibilité avec le système standard, je vais envoyer d'ici qq jours une proposition altervative dans la branche dev. Ca fera une base discussion tangible pour savoir que contiendra la nouvelle version et quand la sortir.

J'espère que tu n'oublieras pas Z dans ta réflexion.
Ainsi que l'indique par exemple le log http://spip.org/notice/23911
c'est une perspective qui séduit.

JLuc

Tout a fait. C'est bien vers ce type d'architecture que je voudrais aller pour l'espace prive.
A ce titre les exec fond html actuels sont une transition en cela qu'ils seront portables par un simple script de migration, ou même mappable dynamiquement pour assurer la migration en douceur.

A contrario, mimer les exec php dans un exec html a coup de #COMMENCER_PAGE perenise cette architecture de construction de pages qui nous fait mal et bloque toute évolution de la structure html de l'espace prive, sauf a réécrire tout d'un coup.

Je suis donc pour le status quo, en attendant que zpip soit mature, et de fonctionner de façon analogue dans l'espace prive.

Cédric

En revanche j'ai vraiment halluciné quand j'ai découvert exec_fond, car c'est le même principe d'un système de squelette à part, qui pourrait se résoudre par des balises supplémentaires, et qui a été inséré dans le noyau, sans autre doc que le log de son dépot (13800), et sans discussion profonde sur ce qu'il représente comme piste très arbitraire de mise en squelette de l'espace privé, contre laquelle je m'insurge complètement.

Je n'arrive pas à comprendre en quoi exec_fond est une surcouche au système de squelettes. Il a un intérêt très circonscrit : appliquer un layout (une structure de page) au contenu HTML du exec. Et uniquement ça. Le but étant de ne pas être dépendant de la structure actuelle.

Je suis d'accord : ce type de structuration et surtout d'abstraction de la structuration (c'est ce point qui est important) peut se faire entièrement en squelettes SPIP avec des INCLURE. Et bien oui, c'est ce que fait ZPIP !

Sauf qu'on est très loin encore de la Zédification de l'espace privé. Là, en très peu de code, le layout est abstrait et on ne s'occupe que du contenu des différents blocs logiques.

La raison pour laquelle je souhaite une sortie rapide d'une version 2.2, ce n'est pas pour imposer un remplaçant à CFG (j'ai bien conscience que je suis loin d'en avoir un) c'est que ce script exec_fond risque de susciter des développements pour lesquels nous seront contraints d'assurer la compatibilité, alors que je pense que sa conception de base est à rejeter hors du noyau. Retirer ce script et sortir une nouvelle version me suffirait rien que pour cette raison.

Juste pour infos ce système de squelettes privés est présent depuis la 2.0 il me semble. Donc ça commence à faire longtemps. Et donc c'est déjà utilisé par des gens.

Sur la zone, il y a actuellement 35 exec HTML, dans 15 plugins différents. Ok ce n'est pas excessif si migration vers un autre système il doit y avoir. Mais il faut aussi compter avec ce qui n'est pas sur la zone, qu'on ne peut évaluer, et qui peut être important puisque ça existe depuis 2.0.

(Je précise : personnellement moi-même ça ne me dérange pas, je mets toujours tout sur la zone, donc ça sera facile à migrer.)

Pour éviter les polémiques, d'autant que j'ai eu déjà plusieurs échanges avec Cédric où je lui proposais de faire évoluer exec_fond vers une compatibilité avec le système standard, je vais envoyer d'ici qq jours une proposition altervative dans la branche dev. Ca fera une base discussion tangible pour savoir que contiendra la nouvelle version et quand la sortir.

Inch'Allah !

A contrario, mimer les exec php dans un exec html a coup de #COMMENCER_PAGE perenise cette architecture de construction de pages qui nous fait mal et bloque toute évolution de la structure html de l'espace prive, sauf a réécrire tout d'un coup.

Ecrire une balise #COMMENCER_PAGE où convenir, comme le fait exec_fond, qu'il faut, je cite,
"recuperer le titre dans le premier hn de la page" par une Regep sur <h[1-6]
"recuperer la hierarchie (au-dessus du contenu) par une RegExp sur un commentaire HTML
"recuperer la navigation (colonne de gauche)" idem
"recuperer les extras (colonne de droite)" idem

ce n'est pas figer la structure ?
L'intérêt d'une balise SPIP c'est d'exprimer des structures indépendamment de la syntaxe concrète qui la portera.
Introduire de la syntaxe concrète dans ce qui se prétend être une abstraction est contradictoire par nature.

Je suis donc pour le status quo, en attendant que zpip soit mature, et de fonctionner de façon analogue dans l'espace prive.

C'est un peu facile d'introduire subrepticement dans la noyau qqch qui emmène tout SPIP vers une direction qui vous plait, et dire ensuite qu'on est pour le statu quo. Le statu quo pendant des années était qu'il n'y a qu'un seul système de squelette dans le noyau. C'est à celui-là qu'il faudrait revenir.

Committo,Ergo:Sum

Je n'arrive pas à comprendre en quoi exec_fond est une surcouche au système de squelettes.

Je n'ai pas dit une surcouche, j'ai dit un système parallèle. Dans les deux cas, il s'agit de code PHP qui prend en entrée une syntaxe arbitraire et délivre en sortie une page HTML.
Ca s'appelle une redondance conceptuelle.

Juste pour infos ce système de squelettes privés est présent depuis la 2.0 il me semble.

Pas du tout, et ça fait partie de mon agacement.
La version 2.0 date du 12 Décembre 2008 avec le dépot 13469.
Le dépot qui a introduit exec_fond dans cette branche date du 14 Mars 2009 (peu avant la 2.0.6) avec
http://trac.rezo.net/trac/spip/changeset/13826
et on y lit dans le log:
  "report discret de exec=fond introduit dans [13800]"
Le fait d'enteriner des changements majeurs lors de la sortie d'une version mineure n'est pas une bonne développement.
Et depuis 15 mois que ce truc là a été introduit, pas une seule ligne de doc, pas une seul lancement de discussion sur ce à quoi ça mène.

Donc ça commence à faire longtemps. Et donc c'est déjà utilisé par des gens.

Ce qui n'est pas documenté n'est lié à aucune obligation de compatitbilité, il faut visiblement le rappeler.

Au-delà des caractéristiques présentes de recuperer_fond, introduire un nouveau système de squelettes au lieu de faire évoluer l'existant me semble particulièrement aberrant au moment où l'expérience d'un systeme parallèle, savoir CFG, montre la galère que c'est à maintenir. Il faut encourager une culture technique commune à tous si on ne veut pas que SPIP devienne une usine à gaz dont plus personne n'a une vue complète. Partant la priorité est de faire rentrer CFG dans le moule, en étendant celui-ci au besoin (c'est justement tout l'intérêt).

Beaucoup de plugins ajoutent un champ simplement sur une table existante. Comment migres-tu dans ces cas là ?

Ca j'ai toujours dit que si on vise la co-existence des plugins, il est hors de question de recourir à cette méthode car 2 plugins ne peuvent rajouter un même champ, alors que 2 plugins peuvent rajouter chacun une table avec ce champ plus une clé de jointure vers la table std. Un plugin qui veut à ce point des rapports privilégiés avec le noyau n'a aucun raison de vouloir être sauvegardé à part proprement pour migrer sur un autre site.

<!-- param=valeur --> est la règle actuelle, qui permet <!-- param=[(#BALISE|filtre)] --> et d'en extraire, après recuperer_fond, le résultat.

Donc on écrit 2 fois le nom des saisies, une fois comme attribut "name" et une fois dans ce pseudo-commentaire ?
Tout ce qui oblige à une double saisie est perdant par principe: tôt ou tard elles se désyncrhonisent.

Quant à tes exemples de ton autre mail :

1) #INCLURE{fond=inc/morceau_de_formulaire}
2) <input type="text" name="#ENV{name}" value="#ENV{value}" />
3) <BOUCLEx(RUBRIQUES){racine}><input type="text" name="secteur#ID_SECTEUR"

il faut redire que, par définition, un compilateur ne peut opérer que s'il a suffisamment de données connues avant l'exécution.
Je ne serais donc pas choqué d'exiger qu'un formulaire de configuration n'utilise pas ces trucs. Je rappelle par ailleurs qu'on peut quand même utiliser l'écriture:

<input name="foo[#ENV{index}]" />

qui transmettra à PHP une saisie accessible par un sous-tableau de $_REQUEST, dont le nom sera connu à la compilation (mais pas l'index, ce qui n'est pas gênant). C'est aussi beaucoup plus maniable pour réceptionner les données que ton exemple numéro 3 qui est franchement masochiste. Combien de squelettes CFG utilisent ça ? En tout cas je préviens tout de suite que je traiterai pas ces cas là.

Committo,Ergo:Sum

  <!-- param=valeur --> est la règle actuelle, qui permet<!-- param=[(#BALISE|filtre)] --> et d'en extraire, après recuperer_fond, le résultat.

Donc on écrit 2 fois le nom des saisies, une fois comme attribut "name" et une fois dans ce pseudo-commentaire ?

Non, ces paramètres sont des compléments au nom des saisies dans CFG.
Pour dire des choses tel que "Où est-ce que je stocke les données" ?

Il n'y a pas de redondance de ce côté là.

Quant à tes exemples de ton autre mail :

1) #INCLURE{fond=inc/morceau_de_formulaire}
2)<input type="text" name="#ENV{name}" value="#ENV{value}" />
  3)<BOUCLEx(RUBRIQUES){racine}><input type="text" name="secteur#ID_SECTEUR"

il faut redire que, par définition, un compilateur ne peut opérer que s'il a suffisamment de données connues avant l'exécution.

On est d'accord. Sauf que ce que je dis c'est que ces limitations ont vite ennuyé des développeurs qui voulaient réaliser ce genre de choses (un inclure est tout de même du plus banal) et qu'il a fallu trouver une solution pour ce faire.

Je ne serais donc pas choqué d'exiger qu'un formulaire de configuration n'utilise pas ces trucs.

Oui, évidemment. On peut toujours dire "vous n'utilisez pas #SAISIE, #INCLURE ni #GET/#SET pour définir les champs..."

C'est aussi beaucoup plus maniable pour réceptionner les données que ton exemple numéro 3 qui est franchement masochiste.
Combien de squelettes CFG utilisent ça ?En tout cas je préviens tout de suite que je traiterai pas ces cas là.

Il y a suffisamment de gens tordus pour pondre des trucs comme ça. J'ai pas dit que c'était bien. Je dis... c'est juste une utilisation que j'ai déjà observée... Certains mettent même des #PIPELINE pour ajouter des champs par d'autres extensions...

Le «pire» exemple de trituration de cerveau qui soit est certainement allègrement gagné avec le CFG de I2. Mais tu peux dire que ce n'est pas vraiment une référence en terme de plugin, je crois que tout le monde te croira pour le coup :slight_smile:

Ecrire une balise #COMMENCER_PAGE où convenir, comme le fait exec_fond, qu'il faut, je cite,
"recuperer le titre dans le premier hn de la page" par une Regep sur <h[1-6]
"recuperer la hierarchie (au-dessus du contenu) par une RegExp sur un commentaire HTML
"recuperer la navigation (colonne de gauche)" idem
"recuperer les extras (colonne de droite)" idem

ce n'est pas figer la structure ?

Non.
Les trois lignes de regexp n'ont pas du tout vocation à générer du HTML au sens de ce que font les squelettes. Cela sert uniquement à définir des *blocs logiques*.
On ne dit pas "là on commence la page", "là on commence une colonne, là on la termine", etc etc. On dit : "il y un bloc de contenu principal", "il y a un bloc qui contiendra de la navigation", ...

Ces blocs logiques sont ensuite répartis dans *un certain* HTML, qui actuellement est "blablabla". Mais qui demain pourra être autre chose puisque c'est abstrait. Le but était, comme l'a dit Cédric de se passer à terme des regexp que tu honnis, en ayant un système similaire à ZPIP mais dans l'espace privé.

Et ça tombe bien : exec_fond utilise les *mêmes* blocs logiques que ZPIP. Donc la même convention de découpage, donc la même "culture technique commune" ! Quelle synchronisation !...

Et depuis 15 mois que ce truc là a été introduit, pas une seule ligne de doc, pas une seul lancement de discussion sur ce à quoi ça mène.

Moi aussi je m'insurge !
http://programmer.spip.org/Contenu-d-un-fichier-exec,186
(ah oui désolé ya pas que spip.net comme doc "officielle" :slight_smile: )

Et cette même documentation des exec HTML est désormais en plus imprimée à des milliers (mais si, mais si) d'exemplaires papier. Le *monde entier* est au courant !...

Donc ça commence à faire longtemps. Et donc c'est déjà utilisé par des gens.

Ce qui n'est pas documenté n'est lié à aucune obligation de compatitbilité, il faut visiblement le rappeler.

Cf lien précédent.

Au-delà des caractéristiques présentes de recuperer_fond, introduire un nouveau système de squelettes au lieu de faire évoluer l'existant me semble particulièrement aberrant au moment où l'expérience d'un systeme parallèle, savoir CFG, montre la galère que c'est à maintenir. Il faut encourager une culture technique commune à tous si on ne veut pas que SPIP devienne une usine à gaz dont plus personne n'a une vue complète. Partant la priorité est de faire rentrer CFG dans le moule, en étendant celui-ci au besoin (c'est justement tout l'intérêt).

Aucune intention de faire un nouveau système en plus. De ce que je comprends du but de Cédric, c'était d'avoir un truc qui abstrait le layout *en partant de l'existant*, donc qui pouvait se mettre en place rapidement. *Mais* qui pourra être migré très simplement vers un système Z-like sans regexp et avec uniquement des INClURE (donc même pas de nouvelles balises).

Donc on écrit 2 fois le nom des saisies, une fois comme attribut "name" et une fois dans ce pseudo-commentaire ?

Non, ces paramètres sont des compléments au nom des saisies dans CFG.
Pour dire des choses tel que "Où est-ce que je stocke les données" ?

Tu veux dire que ça permet de donner un nom de stockage différent de l'attribut "name" ?
Dans combien de cas c'est différent ?

On est d'accord. Sauf que ce que je dis c'est que ces limitations ont vite ennuyé des développeurs qui voulaient réaliser ce genre de choses (un inclure est tout de même du plus banal) et qu'il a fallu trouver une solution pour ce faire.

Une inclusion c'est recevable, du moment que le nom de fichier est connu à la compilation.

Je ne serais donc pas choqué d'exiger qu'un formulaire de configuration n'utilise pas ces trucs.

Oui, évidemment. On peut toujours dire "vous n'utilisez pas #SAISIE, #INCLURE ni #GET/#SET pour définir les champs..."

Perso, à part #INCLURE, je n'utilise pas ça. Je ne répèterai visiblement jamais assez que si l'évolution du langage de squelettes consiste à reinventer PHP, alors SPIP mourra.

C'est aussi beaucoup plus maniable pour réceptionner les données que ton exemple numéro 3 qui est franchement masochiste.
Combien de squelettes CFG utilisent ça ?En tout cas je préviens tout de suite que je traiterai pas ces cas là.

Il y a suffisamment de gens tordus pour pondre des trucs comme ça.

Le problème est de comprendre ce que peut et ne peut pas faire un compilateur. Si on veut une puissance expressive maximale où tout est décidé au dernier moment, savoir l'exécution, alors il faut utiliser un langage interprété, typiquement PHP, et renoncer à avoir de bonnes performances et une facilité de maintenance. Utiliser des squelettes dans cette optique est absurde, parce qu'ils n'apportent rien par rapport à une écriture directe en PHP, en rajoutant un temps de compilation contre-performant.

Combien de personnes qui utilisent SET/GET et compagnie ne savent pas programmer en PHP ? A mon avis, zéro. Contraiement à ce que dit un proverbe anti-écolo, l'abondance de biens peut nuire. Le langage de squelettes ne doit pas être trop riche, sinon il s'appelle PHP et l'équipe de développement de SPIP ne peut paa rivaliser avec celle de PHP, il faut être réaliste.

Committo,Ergo:Sum

Ecrire une balise #COMMENCER_PAGE où convenir, comme le fait exec_fond, qu'il faut, je cite,
"recuperer le titre dans le premier hn de la page" par une Regep sur <h[1-6]
"recuperer la hierarchie (au-dessus du contenu) par une RegExp sur un commentaire HTML
"recuperer la navigation (colonne de gauche)" idem
"recuperer les extras (colonne de droite)" idem

ce n'est pas figer la structure ?

Non.
Les trois lignes de regexp n'ont pas du tout vocation à générer du HTML au sens de ce que font les squelettes.
Cela sert uniquement à définir des *blocs logiques*.

On ne dit pas "là on commence la page", "là on commence une colonne, là on la termine", etc etc. On dit : "il y un bloc de contenu principal", "il y a un bloc qui contiendra de la navigation", ...

Mais on peut obtenir exactement le même effet avec une balise #BLOC_CONTENU_PRINCIPAL, #BLOC_NAVIGATION où n'importe quel autre nom de balise
Et c'est beaucoup plus clair de prendre un langage différent du langage final pour définir la structure de la page, plutôt que de l'exprimer dans des commentaires écrits dans le langage final, ce qui est complètement trompeur car ça rajoute un nouveau formalisme de structuration dont la syntaxe ne se distingue pas de celle du résultat de cette structuration. Rien de plus anti-pédagogique que faire dire 2 choses différentes à une même syntaxe.

Et depuis 15 mois que ce truc là a été introduit, pas une seule ligne de doc, pas une seul lancement de discussion sur ce à quoi ça mène.

Moi aussi je m'insurge !
http://programmer.spip.org/Contenu-d-un-fichier-exec,186
(ah oui désolé ya pas que spip.net comme doc "officielle" :slight_smile: )

Donc on développe un truc qu'on rajoute au détour d'une version doublement mineure, on ne le documente pas sur le site officiel, et on laisse les copains se démerder pour expliquer comment ça marche. Rédiger soi-même la doc de ce qu'on a développé ce n'est pas seulement communiquer avec les autres, c'est aussi s'imposer une réflexion sur la difficulté de compréhension de ce qu'on rajoute, sur la manière dont s'est relié avec l'existant. Chaque fois qu'on commence à rédiger de la doc, on s'aperçoit que ce qu'on a fait contient des choses inutilement compliquées, ou en partie redondantes avec de l'existant. Du coup on retourne coder, on simplifie, on unifie, on rationnalise et au final on obtient qqch de clair, concis et bien documenté. Ca permet aussi aux copains de distinguer dans la masse de commit ce qui est du boulot d'optimisation et consorts pour lesquels il n'y a pas matière à discusssion et donc pas de temps à perdre à lire le code, et le boulot de développement de nouvelles fonctionnalités qui doit passer par une discussion générale plutôt que de mettre tout le monde devant le fait accompli après la publication d'une version officiellement mineure. Je note d'ailleurs que cette partie de mon mail est restée sans réponse.

Je tiens d'ailleurs à dire que si je souhaite la sortie d'une version 2.2, c'est parce que la correction de bug autour d'une petite meta dans la sauvegarde m'a entraîné vers une fonctionnalité nouvelle, savoir des tables de meta spécifiques aux plugins. Ca permettra de dire que cette fonctionnalité est disponible depuis la version 2.2. Mais exec_fond disponible depuis la 2.0.6, vraiment, heureusement que le ridicule ne tue pas.

Committo,Ergo:Sum

Perso, à part #INCLURE, je n'utilise pas ça. Je ne répèterai visiblement jamais assez que si l'évolution du langage de squelettes consiste à reinventer PHP, alors SPIP mourra.

C'est ton avis, ou une prédiction ?

C'est aussi beaucoup plus maniable pour réceptionner les données que ton exemple numéro 3 qui est franchement masochiste.
Combien de squelettes CFG utilisent ça ?En tout cas je préviens tout de suite que je traiterai pas ces cas là.

Il y a suffisamment de gens tordus pour pondre des trucs comme ça.

Le problème est de comprendre ce que peut et ne peut pas faire un compilateur. Si on veut une puissance expressive maximale où tout est décidé au dernier moment, savoir l'exécution, alors il faut utiliser un langage interprété, typiquement PHP, et renoncer à avoir de bonnes performances et une facilité de maintenance. Utiliser des squelettes dans cette optique est absurde, parce qu'ils n'apportent rien par rapport à une écriture directe en PHP, en rajoutant un temps de compilation contre-performant.

Combien de personnes qui utilisent SET/GET et compagnie ne savent pas programmer en PHP ? A mon avis, zéro.

C'est ton avis, mais un rapide sondage te montrerait qu'il est erroné.

Contraiement à ce que dit un proverbe anti-écolo, l'abondance de biens peut nuire. Le langage de squelettes ne doit pas être trop riche, sinon il s'appelle PHP et l'équipe de développement de SPIP ne peut paa rivaliser avec celle de PHP, il faut être réaliste.

Il ne s'agit pas de rivaliser avec PHP, mais simplement de proposer une équivalence à ce que font à peu près tous les langages de templating

ce que sont les squelettes de SPIP

Cedric

Ecrire une balise #COMMENCER_PAGE où convenir, comme le fait exec_fond, qu'il faut, je cite,
"recuperer le titre dans le premier hn de la page" par une Regep sur <h[1-6]
"recuperer la hierarchie (au-dessus du contenu) par une RegExp sur un commentaire HTML
"recuperer la navigation (colonne de gauche)" idem
"recuperer les extras (colonne de droite)" idem

ce n'est pas figer la structure ?

Non.
Les trois lignes de regexp n'ont pas du tout vocation à générer du HTML au sens de ce que font les squelettes.
Cela sert uniquement à définir des *blocs logiques*.

On ne dit pas "là on commence la page", "là on commence une colonne, là on la termine", etc etc. On dit : "il y un bloc de contenu principal", "il y a un bloc qui contiendra de la navigation", ...

Mais on peut obtenir exactement le même effet avec une balise #BLOC_CONTENU_PRINCIPAL, #BLOC_NAVIGATION où n'importe quel autre nom de balise

#DEBUT_CONTENU
#FIN_CONTENU
#DEBUT_NAVIGATION
#FIN_NAVIGATION
...
oui, c'est équivalent

Et c'est beaucoup plus clair de prendre un langage différent du langage final pour définir la structure de la page, plutôt que de l'exprimer dans des commentaires écrits dans le langage final, ce qui est complètement trompeur car ça rajoute un nouveau formalisme de structuration dont la syntaxe ne se distingue pas de celle du résultat de cette structuration.

La notation que j'ai retenue, dans des commentaires html, est une notation assez couramment utilisée en redondance dans le html pour repérer les ouvertures et fermetures de div.
En cela elle n'est pas délirante ni fondamentalement innovante.

Par ailleurs, je ferai remarquer que la présence de ces tags est facultative. Ils ne sont utiles que pour composer une page avec les différents blocs.
Par défaut, pour une page simple qui ne contient que du contenu, aucun balisage n'est nécessaire ; ceci permet au débutant de débuter sans rien apprendre, et de couvrir tous les cas simples. En particulier dans le cas d'une page de configuration.

Rien de plus anti-pédagogique que faire dire 2 choses différentes à une même syntaxe.

Et depuis 15 mois que ce truc là a été introduit, pas une seule ligne de doc, pas une seul lancement de discussion sur ce à quoi ça mène.

Moi aussi je m'insurge !
http://programmer.spip.org/Contenu-d-un-fichier-exec,186
(ah oui désolé ya pas que spip.net comme doc "officielle" :slight_smile: )

Donc on développe un truc qu'on rajoute au détour d'une version doublement mineure, on ne le documente pas sur le site officiel, et on laisse les copains se démerder pour expliquer comment ça marche. Rédiger soi-même la doc de ce qu'on a développé ce n'est pas seulement communiquer avec les autres, c'est aussi s'imposer une réflexion sur la difficulté de compréhension de ce qu'on rajoute, sur la manière dont s'est relié avec l'existant. Chaque fois qu'on commence à rédiger de la doc, on s'aperçoit que ce qu'on a fait contient des choses inutilement compliquées, ou en partie redondantes avec de l'existant. Du coup on retourne coder, on simplifie, on unifie, on rationnalise et au final on obtient qqch de clair, concis et bien documenté. Ca permet aussi aux copains de distinguer dans la masse de commit ce qui est du boulot d'optimisation et consorts pour lesquels il n'y a pas matière à discusssion et donc pas de temps à perdre à lire le code, et le boulot de développement de nouvelles fonctionnalités qui doit passer par une discussion générale plutôt que de mettre tout le monde devant le fait accompli après la publication d'une version officiellement mineure. Je note d'ailleurs que cette partie de mon mail est restée sans réponse.

Il ne m'a nullement semblé que cette fonctionnalité consistait en une innovation en rupture technique qui engageait le core dans une direction irrémédiable, et qui nécessite un débat si long. J'ai visiblement sous estimé les conséquences, ou au moins la perception de celles-ci.

Mais je le rappelle, cette fonctionnalité a justement pour but de séparer le contenu de la page de sa structure de présentation, pour pouvoir par la suite faire évoluer cette dernière, ce qui est actuellement impossible dans l'espace privé avec les exec en PHP.

Le vrai travail de conception de la structure de squelette "idéale" est celui qui est mené autour de Zpip.
A ce sujet, je ne suis pas avare en documentation :

Tout ce qui y est dit, concernant les squelettes du site public, est vrai et peut être appliqué à l'espace privé.
Il est évident que c'est vers cela que je souhaite aller, pour l'espace privé de SPIP, et je crois pouvoir dire que ceux qui ont pratiqué et essayé sont à peu près convaincus.

Si on doit discuter et débattre de l'avenir des squelettes dans l'espace privé, c'est bien autour de ce point que doit tourner la discussion.

Se fatiguer à débattre des jours et des jours sur le système actuel implémente qui repose sur un balisage pseudo-html du contenu me parait assez stérile, et je ne vois vraiment pas quel est l'enjeu derrière pour les utilisateurs.
Certes, il est criticable, on aurait pu choisir une autre syntaxe etc. Mais le service rendu est là, et le passage de ça à un autre n'apporterait à peu près rien aux utilisateurs, sauf à forcer à recoder un existant.

Je tiens d'ailleurs à dire que si je souhaite la sortie d'une version 2.2, c'est parce que la correction de bug autour d'une petite meta dans la sauvegarde m'a entraîné vers une fonctionnalité nouvelle, savoir des tables de meta spécifiques aux plugins. Ca permettra de dire que cette fonctionnalité est disponible depuis la version 2.2. Mais exec_fond disponible depuis la 2.0.6, vraiment, heureusement que le ridicule ne tue pas.

Oui, ça, ça va. J'avais eu l'occasion de l'expérimenter depuis longtempts :slight_smile:

Cédric

cf, pour l'exemple,
http://www.google.fr/codesearch?hl=fr&lr=&q=<!--%2Fnavigation-->

Cédric

Yop,

En cela elle n’est pas délirante ni fondamentalement innovante.

cf, pour l’exemple,
http://www.google.fr/codesearch?hl=fr&lr=&q=%3C!–%2Fnavigation–%3E

Oui, enfin en ce qui me concerne je serais plus favorable à une notation type balise SPIP #BLOC_xxx qui a l’avantage de rester homogène avec le reste du code et évite d’introduire un nouveau format.

Par contre, toutes ces discussions ont commencé par des réflexions d’Emmanuel sur CFG, tables meta, exec=cfg et maintenant on en arrive à #SET, #GET, #INCLURE, saisies, la squeletisation de l’espace privé…
Ne serait-il pas préférable de résumer dans un billet l’ensemble de ces réflexions afin d’identifier plus clairement où on souhaite aller in fine ?

Je reviens sur ce point.
Je suis surpris que tu proposes de créer des balises "macro" quand ça t'arrange et de les insérer dans le core pour une finalité très réduite et précise (limitée à l'espace privé, avec en plus une incompatibilité potentielle si jamais ces balises sont utilisées dans un squelette public où elles n'auraient aucun sens)
alors que tu dénonces par ailleurs vertement celles qui ont été proposées comme les #SAISIE, #SET, #GET et j'en passe, qui ont pourtant une utilité bien plus grande.

J'avoue avoir du mal à voir quelle est la ligne directrice à suivre sur ce point, malgré toute ma bonne volonté.

Cédric