J'ai été confronté à un comportement étonnant de form_hidden sur un formulaire inclu dans une noisette,
dans les circonstances suivantes :
- les urls du site sont sans réécriture (pas url_propres)
- on est sur une page dont l'url est de la forme de celle d'un objet éditorial
par exemple ?page=patate&id_patate=1235 dans l'url
mais il n'est pas nécessaire que 'patate' soit un objet déclaré
- le formulaire est inclu dans une noisette qui ne reçoit PAS l'id_patate
car il n'en a pas besoin
- le formulaire reçoit en conséquence une action qui n'a rien à voir avec l'id_patate de la page courante
(par exemple ?page=desfraises&sucre=oui)
- form_hidden appliqué à cette action renvoie une liste de <input hidden> correspondant à chaque élément de l'action ('desfraises' et 'sucre') comme attendu, mais aussi un input hidden pour l'identifiant 'id_patate' de la page courante, alors que cet identifiant n'apparaît pas dans l'action (et que j'en veux pas)
Si par contre il y a d'autres arguments d'urls dans la page, ça ne crée pas d'autres input pour eux. Sur une page 'truc' il n'y a que l'id_truc' qui se trouve ajouté en input hidden.
La doc sur spip.net ne décrit pas cela : "Si on fait un formulaire qui utilise comme action un lien comprenant des arguments (par exemple, quand on utilise la balise #SELF avec le type d’url par défaut), il faut remettre ces valeurs dans des champs hidden ; cette fonction calcule les champs en question.")
Cet ajoût dérogatoire est-il nécessaire ? Pourquoi ?
Si cet ajoût est nécessaire par défaut, peut être serait il possible d'ajouter un argument à form_hidden pour utiliser form_hidden SANS que l'identifiant de la page courante soit ajoutée comme input hidden dans le formulaire, s'il n'est pas explicitement dans l'action ?
C'est peut être un bug aussi : une fuite bien ciblée, du contexte global dans l'action locale.
form_hidden appelle urls_decoder_url pour 'comprendre' l'action et en extraire les variables mais je ne vois pas où la fuite a lieu.
JL
JLuc