[spip-dev] r12822 - branches/spip-2.0/ecrire/inc branches/spip-2.0/prive/formulaires spip/ecrire/inc spip/prive/formulaires

esj@rezo.net a écrit :

Donc, dans les squelettes des formulaires d'édition privée,

> si le paramètre {{{action}}} est vide, alors les balises ouvrante et fermante {{{form}}}
> ne sont pas produites, non plus que {{{hidden}}} de l'action
> et le bouton {{{submit}}}.
> En pratique, cela veut dire qu'on peut faire ramener à une {{{#FORMULAIRE_*}}}
> le corps du formulaire sans ces balises {{{form}}} englobante,
> qu'on complètera facilement dans le squelette appelant.
> Par exemple, pour compléter le formulaire d'édition d'un article,
> au lieu d'écrire (comme dans prive/editer/article.hmtl):

#FORMULAIRE_EDITER_ARTICLE{#ENV{id_article}, #ENV{id_rubrique}, #ENV{redirect},#ENV{lier_trad},#ENV{config_fonc},#ENV{row}}

on écrit

<form action='#ENV{redirect}'>
[(#ACTION_FORMULAIRE{#ENV{redirect}}]
#FORMULAIRE_EDITER_ARTICLE{#ENV{id_article}, #ENV{id_rubrique}, ' ',#ENV{lier_trad},#ENV{config_fonc},#ENV{row}}
mes autres saisies
<input type='submit' />
</form>

Salut Esj,

Je comprend pas grand chose à ton commit ce qui ne m'étonne pas outre mesure,
mais je comprend presque rien à ton exemple, ce qui m'inquiète.

J'ai l'impression que tu transformes un truc simple en un truc plus généraliste,
mais nettement plus lourd à utiliser.

Est-ce que j'ai tort de m'inquiéter ou bien peut être il faudrait garder 2 formes,
l'une simple et légère, généralement suffisante,
l'autre plus lourde mais plus finement paramétrable et plus ... générale ?

JL

JLuc a écrit :

Salut Esj,

Je comprend pas grand chose à ton commit ce qui ne m'étonne pas outre mesure,
mais je comprend presque rien à ton exemple, ce qui m'inquiète.

J'ai l'impression que tu transformes un truc simple en un truc plus généraliste,
mais nettement plus lourd à utiliser.

Est-ce que j'ai tort de m'inquiéter ou bien peut être il faudrait garder 2 formes,
l'une simple et légère, généralement suffisante,
l'autre plus lourde mais plus finement paramétrable et plus ... générale ?

Si j'ai bien compris le commit, les 2 formes sont conservées, à savoir :
#FORMULAIRE_EDITER_XX (ou XX est un objet du privé) prend un certain nombre d'arguments. Lorsque l'argument redirect est fourni (différent de ' ') alors, tout se passe comme avant le commit.

Lorsque l'argument vaut ' ', les balises form ne sont plus générées (juste dans ces formulaires hein - rien à voir avec l'api CVT)

Ceci à pour conséquence, au vu des modifs de esj qu'on peut ajouter à la main des champs dans les-dits formulaires en surchargeant uniquement prive/editer/xx.html

Ca, c'est ce que j'en comprends et ce qui semble se passer. De là à dire que ça simplifie... je ne suis pas certain, mais Emmanuel avait certainement une bonne raison.

L'architecture de CVT contient intrinsequement tous les mecanismes pour traiter les cas particuliers dans toucher au cas général :
- par surcharge des fonctions charger, verifier, traiter
- par pipeline sur le formulaire, et sur charger, verifier, traiter

il faut que je comprenne le manque fonctionnel qui justifie ce commit, mais peut être est-ce surtout un manque de doc de ma part.
Cédric

il faut que je comprenne le manque fonctionnel qui justifie ce commit, mais peut être est-ce surtout un manque de doc de ma part.

ou les 2 :slight_smile:

Bon, en tout cas ce qui est clair c'est que quand on écrivait
#FORMULAIRE_EDITER_ARTICLE{#ENV{id_article}, #ENV{id_rubrique}, X}
et bien X n'était pas pris en compte.

Peut-être que j'aurais pu aboutir à ce que j'aurais voulu par d'autres moyens,
mais si c'est le cas ça veut dire que cet argument ne sert absolument à rien
et n'aurait pas dû figurer dans les specs.
J'ai préféré l'interpréter comme qqch d'utile, dont le fonctionnement était gêné par un bug.

L'architecture de CVT contient intrinsequement tous les mecanismes pour traiter les cas particuliers dans toucher au cas général

Alors explique moi pourquoi il y a un code complètement opaque avec set_request('redirect'...) dans le cas groupe_mot ?

JLuc a écrit :

J'ai l'impression que tu transformes un truc simple en un truc plus généraliste,
mais nettement plus lourd à utiliser.

Pas du tout, puisque je donne du sens à un argument qui n'en n'avait pas mais qu'on n'est pas obligé d'utiliser.

Lorsque l'argument redirect est fourni (différent de ' ') alors, tout se passe comme avant le commit.

oui, et aussi quand il n'est pas fourni du tout, comme avant.

Lorsque l'argument vaut ' ', les balises form ne sont plus générées (juste dans ces formulaires hein - rien à voir avec l'api CVT)

Ceci à pour conséquence, au vu des modifs de esj qu'on peut ajouter à la main des champs dans les-dits formulaires en surchargeant uniquement prive/editer/xx.html

Ca, c'est ce que j'en comprends

et tu as bien compris.

Emmanuel avait certainement une bonne raison.

En l'occurrence, ce que je voulais c'est valider la saisie puis atterrir ailleurs que sur la page de saisie,
genre le "Valider et Répondre" du controle_forum: on a une suite de saisies à faire, on en fait une, on la valide et on passe directement à la suivante.
Tout ça est venu de la disparition de inc_editer_article que j'utilisais auparavant et qui a été remplacé par la balise #FORMULAIRE_EDITER_ARTICLE, qui est très bien mais moins pratique pour ce qui est de rajouter des saisies. Cette solution qui permet de construire des corps de formulaires me semble donc répondre à un besoin, ajouté au besoin de ne pas avoir des paramètres qui ne servent à rien.

Committo,Ergo:Sum

il faut que je comprenne le manque fonctionnel qui justifie ce commit, mais peut être est-ce surtout un manque de doc de ma part.

ou les 2 :slight_smile:

Bon, en tout cas ce qui est clair c'est que quand on écrivait
#FORMULAIRE_EDITER_ARTICLE{#ENV{id_article}, #ENV{id_rubrique}, X}
et bien X n'était pas pris en compte.

Je ne comprends pas :
X est pris en compte apres le post, dans
formulaires_editer_article_traiter_dist($id_article='new', $id_rubrique=0, $retour='', $lier_trad=0, $config_fonc='articles_edit_config', $row=array(), $hidden='')
(qui recoit les memes arguments que charger() et verifier())
et appelle
formulaires_editer_objet_traiter dans inc/editer
qui, ligne 28 appelle
redirige_formulaire(parametre_url($retour,$id_table_objet,$id));
en l'absence d'erreur

Peut-être que j'aurais pu aboutir à ce que j'aurais voulu par d'autres moyens,
mais si c'est le cas ça veut dire que cet argument ne sert absolument à rien
et n'aurait pas dû figurer dans les specs.
J'ai préféré l'interpréter comme qqch d'utile, dont le fonctionnement était gêné par un bug.

L'architecture de CVT contient intrinsequement tous les mecanismes pour traiter les cas particuliers dans toucher au cas général

Alors explique moi pourquoi il y a un code complètement opaque avec set_request('redirect'...) dans le cas groupe_mot ?

parce qu'on réutilise action/editer_groupe_mots, qui par defaut redirige vers _request('redirect') si present ans l'url et que je n'ai pas voulu casser cette action par soucis de compatibilité.
Mais à terme, action/editer_groupe_mots ne fera plus de redirect par elle meme, evitant ce hack.

Le retour (ex redirect) est toujours effectué apres le post, mais est transmis par les arguments de charger/verifier/traiter, et non comme valeur en claire

JLuc a écrit :

J'ai l'impression que tu transformes un truc simple en un truc plus généraliste,
mais nettement plus lourd à utiliser.

Pas du tout, puisque je donne du sens à un argument qui n'en n'avait pas mais qu'on n'est pas obligé d'utiliser.

Lorsque l'argument redirect est fourni (différent de ' ') alors, tout se passe comme avant le commit.

oui, et aussi quand il n'est pas fourni du tout, comme avant.

Lorsque l'argument vaut ' ', les balises form ne sont plus générées (juste dans ces formulaires hein - rien à voir avec l'api CVT)

Ceci à pour conséquence, au vu des modifs de esj qu'on peut ajouter à la main des champs dans les-dits formulaires en surchargeant uniquement prive/editer/xx.html

Ca, c'est ce que j'en comprends

et tu as bien compris.

cela alourdit nettement l'ecriture et n'est pas franchement pedagogique pour le coup.
Par ailleurs :
- En terme de css cela pose d'autres problèmes car on modifie la sequence div.formulaire_spip > form en form > div.formulaire_spip avec du coup certains stylages hasardeux
- L'écriture proposée n'est pas compatible avec l'ajaxisation simplifiée du formulaire CVT ce qui en casse l'esprit (qui consiste simplement a le mettre dans un <div class='ajax'>), et à terme, si le formulaire est en ajax par défaut (pour le moment ça n'est pas le cas), cela plantera complètement avec la div.formulaire_spip.ajax contenue dans le form au lieu du contraire.
- l'ajout de champ est déja possible par le pipeline editer_contenu_objet (cf a ce sujet le plugin extra), sans aucune surcharge

Emmanuel avait certainement une bonne raison.

En l'occurrence, ce que je voulais c'est valider la saisie puis atterrir ailleurs que sur la page de saisie,
genre le "Valider et Répondre" du controle_forum: on a une suite de saisies à faire, on en fait une, on la valide et on passe directement à la suivante.

oui, aucun probleme avec le $retour d'origine qui doit faire son office.
Si tu regarde l'espace privé il est construit comme cela :
#FORMULAIRE_EDITER_ARTICLE est contenu dans la page affichée par exec=articles_edit, et après validation on arrive sur la page exec=articles

Je ne vois vraiment pas quel manque cela comble, et le paramètre retour est utilisé dans traiter(), il ne sert pas à rien.

Cédric

* JLuc tapuscrivait, le 29/09/2008 19:18:

esj@rezo.net a écrit :

Donc, dans les squelettes des formulaires d'édition privée,

> si le paramètre {{{action}}} est vide, alors les balises ouvrante et fermante {{{form}}}
> ne sont pas produites, non plus que {{{hidden}}} de l'action
> et le bouton {{{submit}}}.
> En pratique, cela veut dire qu'on peut faire ramener à une {{{#FORMULAIRE_*}}}
> le corps du formulaire sans ces balises {{{form}}} englobante,
> qu'on complètera facilement dans le squelette appelant.
> Par exemple, pour compléter le formulaire d'édition d'un article,
> au lieu d'écrire (comme dans prive/editer/article.hmtl):

#FORMULAIRE_EDITER_ARTICLE{#ENV{id_article}, #ENV{id_rubrique}, #ENV{redirect},#ENV{lier_trad},#ENV{config_fonc},#ENV{row}}

on écrit

<form action='#ENV{redirect}'>
[(#ACTION_FORMULAIRE{#ENV{redirect}}]
#FORMULAIRE_EDITER_ARTICLE{#ENV{id_article}, #ENV{id_rubrique}, ' ',#ENV{lier_trad},#ENV{config_fonc},#ENV{row}}
mes autres saisies
<input type='submit' />
</form>

Salut Esj,

Je comprend pas grand chose à ton commit ce qui ne m'étonne pas outre mesure,
mais je comprend presque rien à ton exemple, ce qui m'inquiète.

J'ai l'impression que tu transformes un truc simple en un truc plus généraliste,
mais nettement plus lourd à utiliser.

Est-ce que j'ai tort de m'inquiéter ou bien peut être il faudrait garder 2 formes,
l'une simple et légère, généralement suffisante,
l'autre plus lourde mais plus finement paramétrable et plus ... générale ?

Et il semblerait bien que ça casse le référencement automatisé de site.

En SPIP 2.0.0 beta2 SVN [12822] j'ai eu droit à une erreur : Il n'y a pas de site à cette adresse en tentant un référencement automatisé de site.

En 12821, ça marche sans problème.
Enfin, si, un tout petit problème : sur demo.spip.org, SPIP 1.9.2, au référencement automatique d'un site et validation de la syndication, SPIP récupérait automatiquement le logo du flux RSS pour en faire le logo du site.
Ce n'est plus le cas en SPIP 2.

Bon, en tout cas ce qui est clair c'est que quand on écrivait
#FORMULAIRE_EDITER_ARTICLE{#ENV{id_article}, #ENV{id_rubrique}, X}
et bien X n'était pas pris en compte.

Je ne comprends pas :
X est pris en compte apres le post, dans
formulaires_editer_article_traiter_dist($id_article='new', $id_rubrique=0, $retour='', $lier_trad=0, $config_fonc='articles_edit_config', $row=array(), $hidden='')
(qui recoit les memes arguments que charger() et verifier())
et appelle
formulaires_editer_objet_traiter dans inc/editer
qui, ligne 28 appelle
redirige_formulaire(parametre_url($retour,$id_table_objet,$id));
en l'absence d'erreur

Je connais ton code moins bien que toi, mais en tout cas à la ligne 100 de balise/formulaires.php il y a:

  isset($valeurs['action']) ? ....

qui auparavant ne pouvait être que toujours faux sauf erreur de ma part.

Alors explique moi pourquoi il y a un code complètement opaque avec set_request('redirect'...) dans le cas groupe_mot ?

parce qu'on réutilise action/editer_groupe_mots, qui par defaut redirige vers _request('redirect') si present ans l'url et que je n'ai pas voulu casser cette action par soucis de compatibilité.
Mais à terme, action/editer_groupe_mots ne fera plus de redirect par elle meme, evitant ce hack.

mon objection n'était pas en soi sur ce bout de code, mais sur le fait qu'il prouve qu'il existe des situations dans lesquelles les arguments transmis aux fonctions sont insuffisants.

cela alourdit nettement l'ecriture

L'écriture de quoi ?

et n'est pas franchement pedagogique pour le coup.
Par ailleurs :
- En terme de css

Alors parlons-en des CSS ! c'est quoi cette balise <style> en plein milieu d'une fonction PHP ?
C'est sur un cas complètement à part, j'ai bien compris, mais ça donne tellement l'impression que ce code est encore en chantier qu'à la première contrariété venue on se dit qu'il y a un bug.

cela pose d'autres problèmes car on modifie la sequence div.formulaire_spip > form en form > div.formulaire_spip avec du coup certains stylages hasardeux
- L'écriture proposée n'est pas compatible avec l'ajaxisation simplifiée du formulaire CVT ce qui en casse l'esprit (qui consiste simplement a le mettre dans un <div class='ajax'>), et à terme, si le formulaire est en ajax par défaut (pour le moment ça n'est pas le cas), cela plantera complètement avec la div.formulaire_spip.ajax contenue dans le form au lieu du contraire.

Je ne comprends pas: dans le cas habituel je produis le même HTML qu'avant.

- l'ajout de champ est déja possible par le pipeline editer_contenu_objet (cf a ce sujet le plugin extra), sans aucune surcharge

pipeline ==> php ===> fuite des webdesigner. Ce que je propose se fait intégralement par squelettes.

Committo,Ergo:Sum

aucun rapport.

Committo,Ergo:Sum

* Committo,Ergo:sum tapuscrivait, le 29/09/2008 22:16:

Et il semblerait bien que ça casse le référencement automatisé de site.

aucun rapport.

Sauf que remonter en 12821 permet de référencer automatiquement un site et que ça ne marche plus en 12822.

qu'appelles-tu le référencement ici ?
Ils sont incompréhensibles tes messages aujourd'hui.

Committo,Ergo:Sum

Bon, en tout cas ce qui est clair c'est que quand on écrivait
#FORMULAIRE_EDITER_ARTICLE{#ENV{id_article}, #ENV{id_rubrique}, X}
et bien X n'était pas pris en compte.

Je ne comprends pas :
X est pris en compte apres le post, dans
formulaires_editer_article_traiter_dist($id_article='new', $id_rubrique=0, $retour='', $lier_trad=0, $config_fonc='articles_edit_config', $row=array(), $hidden='')
(qui recoit les memes arguments que charger() et verifier())
et appelle
formulaires_editer_objet_traiter dans inc/editer
qui, ligne 28 appelle
redirige_formulaire(parametre_url($retour,$id_table_objet,$id));
en l'absence d'erreur

Je connais ton code moins bien que toi, mais en tout cas à la ligne 100 de balise/formulaires.php il y a:

  isset($valeurs['action']) ? ....

qui auparavant ne pouvait être que toujours faux sauf erreur de ma part.

oui, l'action des CVT est eventuellement définissable dans certains cas particuliers (ie le formulaire de recherche qui ne comporte aucune phase de verification, donc peut poster ailleurs), mais *toujours* sur self() dès qu'il faut vérifier() la saisie, donc en particulier avec le formulaire_editer_article. L'implémentation des formulaires_editer_xx de l'espace privé ne prévoit donc jamais une url de post différente de self() car cela casse le fonctionnement de l'étape verifier().

Alors explique moi pourquoi il y a un code complètement opaque avec set_request('redirect'...) dans le cas groupe_mot ?

parce qu'on réutilise action/editer_groupe_mots, qui par defaut redirige vers _request('redirect') si present ans l'url et que je n'ai pas voulu casser cette action par soucis de compatibilité.
Mais à terme, action/editer_groupe_mots ne fera plus de redirect par elle meme, evitant ce hack.

mon objection n'était pas en soi sur ce bout de code, mais sur le fait qu'il prouve qu'il existe des situations dans lesquelles les arguments transmis aux fonctions sont insuffisants.

cela alourdit nettement l'ecriture

L'écriture de quoi ?

du formulaire en lui meme

et n'est pas franchement pedagogique pour le coup.
Par ailleurs :
- En terme de css

Alors parlons-en des CSS ! c'est quoi cette balise <style> en plein milieu d'une fonction PHP ?
C'est sur un cas complètement à part, j'ai bien compris, mais ça donne tellement l'impression que ce code est encore en chantier qu'à la première contrariété venue on se dit qu'il y a un bug.

encore du vieux code reconditionné ...

cela pose d'autres problèmes car on modifie la sequence div.formulaire_spip > form en form > div.formulaire_spip avec du coup certains stylages hasardeux
- L'écriture proposée n'est pas compatible avec l'ajaxisation simplifiée du formulaire CVT ce qui en casse l'esprit (qui consiste simplement a le mettre dans un <div class='ajax'>), et à terme, si le formulaire est en ajax par défaut (pour le moment ça n'est pas le cas), cela plantera complètement avec la div.formulaire_spip.ajax contenue dans le form au lieu du contraire.

Je ne comprends pas: dans le cas habituel je produis le même HTML qu'avant.

mais le formulaire n'est pas intégralement produit par son squelette, donc le hit ajax de CVT qui renvoie le contenu généré par la balise #FORMULAIRE_EDITER_ARTICLE va renvoyer un morceau de formulaire incomplet.
la prise en charge automatisée de l'ajax repose sur la concordance formulaire_xx= produit de la fonction balise_forumlaire__dyn et du squelette formulaires/xx.html
Dont rajout sort de ce schéma.

- l'ajout de champ est déja possible par le pipeline editer_contenu_objet (cf a ce sujet le plugin extra), sans aucune surcharge

pipeline ==> php ===> fuite des webdesigner. Ce que je propose se fait intégralement par squelettes.

n'exagerons pas, et dans ce cas, si l'on veut vraiment rester au stade des squelettes, le plus simple est encore d'ajouter un mecanisme d'inclusion dans le squelette du formulaire lui meme, sur le modele de ce que j'ai fait dans style_prive_plugins qui inclut tous les fonds style_prive_plugin_xxx trouvés dans le path.

Par ailleurs en relisant le commentaire de ton commit je note aussi que
- #ACTION_FORMULAIRE ne fonctionnera pas correctement en dehors du squelette du formulaire car il ne dispose pas du contexte du formulaire
- l'ajout de champs en dehors du formulaire comme tu le propose est inutilisable car ne permet pas d'avoir le contexte du formulaire, donc en particulier les erreurs, les valeurs de la saisie précédente ou pré remplie ...

En résumé, je pense que cet ajout est conceptuellement lourd de consequences, et ne devrait a tout le moins pas figurer dans la branche stable, et de plus cela me fait plus penser a un vilain hack en cela qu'il donne certes une réponse à deux besoins que je crois comprendre :
- un est d'ajouter des champs dans le formulaire, mais pas via le pipeline
- l'autre de rediriger apres le post, mais je n'ai toujours pas compris en quoi le mécanisme d'origine ne fonctionnait pas
mais au prix de dysfonctionnements serieux car il ne couvre pas tous les cas.

Et je reviens encore à ma question initiale :
pourquoi le post sur self() suivi d'une redirection sur $retour dans la fonction traiter() ne suffisait pas ?
complétée par une autre
Comment traites-tu la verification de la saisie dans ton post sur une autre url ?

Cédric

* Committo,Ergo:sum tapuscrivait, le 29/09/2008 22:55:

* Committo,Ergo:sum tapuscrivait, le 29/09/2008 22:16:

Et il semblerait bien que ça casse le référencement automatisé de site.

aucun rapport.

Sauf que remonter en 12821 permet de référencer automatiquement un site et que ça ne marche plus en 12822.

qu'appelles-tu le référencement ici ?

1) Je suis dans une rubrique : ecrire/?exec=naviguer&id_rubrique=6
2) Je clique sur référencer un site : j'arrive dans ecrire/?exec=sites_edit&id_rubrique=6
3) Je saisie dans la première zone (Référencement automatisé d'un site) : http://www.spip.net/
4) je clique sur le bouton Ajouter

En 12821, ça marche, en 12822 ça me dit que : "Il n'y a pas de site à cette adresse"

Ils sont incompréhensibles tes messages aujourd'hui.

Mea culpa.

Je connais ton code moins bien que toi, mais en tout cas à la ligne 100 de balise/formulaires.php il y a:

  isset($valeurs['action']) ? ....

qui auparavant ne pouvait être que toujours faux sauf erreur de ma part.

oui,

oui ? alors pourquoi laisser un code inutile qui va faire partir sur la piste d'un bug au premier souci ?

l'action des CVT est eventuellement définissable dans certains cas particuliers (ie le formulaire de recherche qui ne comporte aucune phase de verification, donc peut poster ailleurs),

eh oui, et c'est mon cas.

mais *toujours* sur self() dès qu'il faut vérifier() la saisie, donc en particulier avec le formulaire_editer_article. L'implémentation des formulaires_editer_xx de l'espace privé ne prévoit donc jamais une url de post différente de self() car cela casse le fonctionnement de l'étape verifier().

ok, donc ça ne sert à rien d'avoir mis 'redirect' => generer_url_ecrire(...) dans le contexte,
et d'ailleurs ces valeurs sont ignorées comme je le disais dans en 12822, et cela explique le bug que vient de signaler Realet et auquel je n'ai pas cru sur le coup: dans le cas des sites, tu as mis:

'redirect'=>generer_url_ecrire("sites")

qui est faux car il manque le id_rubrique, mais jusqu'à présent il était ignoré et remplacé par self() comme je disais. Maintenant que le nouveau code considère que ce que tu as pris la peine d'écrire mérite considération, il n'y a plus 2 bugs s'annulant l'un l'autre et ça pète.

Pfiouuuuuuuuu

cela alourdit nettement l'ecriture

L'écriture de quoi ?

du formulaire en lui meme

Bof, préciser qu'on ne met pas "form" s'il n'y a rien pour son attribut obligatoire "action", c'est plutôt une mesure de salubrité.

Je ne comprends pas: dans le cas habituel je produis le même HTML qu'avant.

mais le formulaire n'est pas intégralement produit par son squelette, donc le hit ajax de CVT qui renvoie le contenu généré par la balise #FORMULAIRE_EDITER_ARTICLE va renvoyer un morceau de formulaire incomplet.
la prise en charge automatisée de l'ajax repose sur la concordance formulaire_xx= produit de la fonction balise_forumlaire__dyn et du squelette formulaires/xx.html
Dont rajout sort de ce schéma.

Bon, ça c'est une objection fondée.

pipeline ==> php ===> fuite des webdesigner. Ce que je propose se fait intégralement par squelettes.

n'exagerons pas, et dans ce cas, si l'on veut vraiment rester au stade des squelettes, le plus simple est encore d'ajouter un mecanisme d'inclusion dans le squelette du formulaire lui meme, sur le modele de ce que j'ai fait dans style_prive_plugins qui inclut tous les fonds style_prive_plugin_xxx trouvés dans le path.

Ce serait plus propre oui, mais pour le coup c'est ça qui risquerait d'alourdir l'écriture: A inclut B en lui transmettant des infos dont il se fout mais qu'il devra transmettre à C. Ouf.

Par ailleurs en relisant le commentaire de ton commit je note aussi que
- #ACTION_FORMULAIRE ne fonctionnera pas correctement en dehors du squelette du formulaire car il ne dispose pas du contexte du formulaire

- l'ajout de champs en dehors du formulaire comme tu le propose est inutilisable car ne permet pas d'avoir le contexte du formulaire, donc en particulier les erreurs, les valeurs de la saisie précédente ou pré remplie ...

Si les ajouts se font sans référence au contexte std, ça n'a pas d'importance. C'est ni plus ni moins dérogatoire que le formulaire de recherche dont tu parlais.

En résumé, je pense que cet ajout est conceptuellement lourd de consequences, et ne devrait a tout le moins pas figurer dans la branche stable, et de plus cela me fait plus penser a un vilain hack en cela qu'il donne certes une réponse à deux besoins que je crois comprendre :
- un est d'ajouter des champs dans le formulaire, mais pas via le pipeline
- l'autre de rediriger apres le post, mais je n'ai toujours pas compris en quoi le mécanisme d'origine ne fonctionnait pas
mais au prix de dysfonctionnements serieux car il ne couvre pas tous les cas.

Hormis le cas révélé par le bug de Relaet et qui se corrige en enlevant les Redirect puisqu'ils ne servent pas, je ne vois pas où il y a dysfonctionnement. Cela dit j'admets que ce que j'ai envoyé ne recouvre pas tous les cas, mais je l'ai fait parce que je pensais que CVT couvrait tous les cas et que mon blocage ne pouvait être qu'un bug dans son implémentation, pas dans sa conception.

Maintenant deux solutions:

- la propre: on affirme que CVT ne peut faire retour que sur lui-même et on retranche un paramètre dans toutes les balises FORMULAIRE_EDITER.

- la pratique: on admet que CVT peut faire un peu plus mais pas tout et donc on laisse en l'état, sans documentation.

Et je reviens encore à ma question initiale :
pourquoi le post sur self() suivi d'une redirection sur $retour dans la fonction traiter() ne suffisait pas ?
complétée par une autre

car moi aussi j'ai parfois:

du vieux code reconditionné ...

:wink:

Committo,Ergo:Sum

Bon alors je viens de regarder et ton commit est plus dévastateur que ce que j'avais vu :
on a perdu l'étape de vérification de tous les formulaires de l'espace privé :

les 3 fonctions charger(), verifier(), traiter() recoivent toutes 3 tous les arguments passés a la balise #FORMULAIRE_XX
dans editer/article on a
#FORMULAIRE_EDITER_ARTICLE{#ENV{new},#ENV{id_rubrique},#ENV{redirect},#ENV{lier_trad},#ENV{config_fonc},#ENV{row}}

avec redirect qui est la redirection qui doit avoir lieu APRES le post et qui est utilisée dans traiter(), donc et pas dans charger()

Depuis ton commit, tous les #FORMULAIRE_EDITER_XX postent sur le redirect au lieu de poster sur self()
Du coup, si la saisie est bonne, on ne voit pas la différence,mais en cas d'erreur, on ne voit rien, aucune modification n'a lieu ...
Bref, on a perdu l'étape de vérification/signalement des erreurs qui repose sur le fait que le formulaire poste sur self(). Ce comportement est indispensable à toute la logique du système.

ok, donc ça ne sert à rien d'avoir mis 'redirect' => generer_url_ecrire(...) dans le contexte,
et d'ailleurs ces valeurs sont ignorées comme je le disais dans en 12822, et cela explique le bug que vient de signaler Realet et auquel je n'ai pas cru sur le coup: dans le cas des sites, tu as mis:

'redirect'=>generer_url_ecrire("sites")

qui est faux car il manque le id_rubrique, mais jusqu'à présent il était ignoré et remplacé par self() comme je disais. Maintenant que le nouveau code considère que ce que tu as pris la peine d'écrire mérite considération, il n'y a plus 2 bugs s'annulant l'un l'autre et ça pète.

NON, le code n'est pas buggué, c'est l'interprétation que tu en fait qui l'est :
redirect n'est pas et n'a jamais été la valeur de l'url sur laquelle poster, mais celle sur laquelle rediriger apres le post sur self().

Le redirect est INDISPENSABLE car les #FORMULAIRE_EDITER_XX peuvent etre utilisés dans n'importe quel squelette qui précise alors ou il faut rediriger apres le post.
On n'est plus dans le contexte exclusif et unique de ecrire/

...
Hormis le cas révélé par le bug de Relaet et qui se corrige en enlevant les Redirect puisqu'ils ne servent pas, je ne vois pas où il y a dysfonctionnement. Cela dit j'admets que ce que j'ai envoyé ne recouvre pas tous les cas, mais je l'ai fait parce que je pensais que CVT couvrait tous les cas et que mon blocage ne pouvait être qu'un bug dans son implémentation, pas dans sa conception.

C'est un choix de conception que de chercher à simplifier le cas général où le post doit se faire sur l'url initiale pour pouvoir prendre en charge les erreurs de saisie.

Maintenant deux solutions:

- la propre: on affirme que CVT ne peut faire retour que sur lui-même et on retranche un paramètre dans toutes les balises FORMULAIRE_EDITER.

oui, mais le parametre est indispensable, comme je l'explique ci-dessus, il ne faut pas le retirer

- la pratique: on admet que CVT peut faire un peu plus mais pas tout et donc on laisse en l'état, sans documentation.

non, on ne peut pas, cela a tout cassé l'espace privé et le fonctionnement meme des #FORMULAIRES_EDITER_XX

Et je reviens encore à ma question initiale :
pourquoi le post sur self() suivi d'une redirection sur $retour dans la fonction traiter() ne suffisait pas ?
complétée par une autre

car moi aussi j'ai parfois:

du vieux code reconditionné ...

oui je comprends bien, mais pour avoir porté tous les cas plus ou moins derogatoires de spip dans le mécanisme CVT, je ne vois pas quel cas ne pourrait pas être couvert.
Cela passe peut etre par une surcharge de l'une des fonctions ou l'utilisation d'un des pipelines pour traiter ton cas particulier ?

Cédric

Bon, ok, de mon côté avec le bug sur site_edit, je viens de comprendre que ce que tu nommes "redirect" n'est pas l'URL complète de redirection mais le nom du script auquel tu vas rajouter des paramètres. Là aussi comme fausse piste, bonjour.

Je veux bien qu'on mette à la poubelle 12822, donc qu'on reparte sur 12821 mais s'il te plait nettoie ton code, parce l'expérience vient de montrer que quand on essaye de raccrocher les wagons c'est bourré de chausses-trappes. Je verrai après si je trouve une solution à mon probème moins intrusive.

Committo,Ergo:Sum

cedric.morin@yterium.com a écrit :

pipeline ==> php ===> fuite des webdesigner. Ce que je propose se fait intégralement par squelettes.

n'exagerons pas,

c'est un louable soucis néanmoins que de faciliter l'enrichissement
sans passer par les surcharges php et autres pipelines
protocolairement complexes.

JLuc

JLuc a écrit :

cedric.morin@yterium.com a écrit :

pipeline ==> php ===> fuite des webdesigner. Ce que je propose se fait intégralement par squelettes.

n'exagerons pas,

c'est un louable soucis néanmoins que de faciliter l'enrichissement
sans passer par les surcharges php et autres pipelines
protocolairement complexes.

Sauf que les pipelines sont à priori le SEUL moyen d'insérer des choses dans un formulaire *à l'endroit où l'on veut*.
Et non pas uniquement tout au début, ou tout à la fin, ou à un endroit précis unique défini à l'avance.

J'ai eu ce besoin la semaine dernière, et je suis bien content d'avoir découvert le pipeline adéquat.
Exemple :

Là j'ai mis le HTML dans le PHP, mais j'aurais pu le mettre dans un squelette avec paramètres et faire "recuperer_fond()".

Le manque : la doc sur les pipelines, qu'il faut remplir (dès qu'on en crée un nouveau) !!
http://doc.spip.org/@Les-points-d-entree-pipelines#liste-points-entree