Bonjour à tous,
Je crois que je suis tombé sur un os avec SPIP 3.0.5 [19905] et je me
demande s'il faut que je remplisse un ticket...
J'ai un squelette qui fabrique un XML à télécharger et qui débute ainsi:
#FILTRE{trim}
<BOUCLE_J(BIDULE){id_bidule}>
[(#HTTP_HEADER{Content-Disposition: attachment;
filename=[export_de_(#TITRE*|textebrut|replace{" ","_"}).xml];
Content-type: text/xml[; charset=(#CHARSET)]})]<?xml version="1.0"
encoding="UTF-8"?>
Mon but est d'éviter l'affichage dans le navigateur et de provoquer la
sauvegarde du XML généré par le squelette grâce à
"Content-Disposition: attachment"... Ça marche plutôt bien sauf que le
fichier sauvegardé contient le HTML correspondant aux boutons admin de
SPIP !
Comme les utilisateurs qui vont sauvegarder ce XML seront absolument
tous loggués, c'est très ennuyeux que mon XML soit invalidé par le
rajout du HTML des boutons admin.
Je pourrais bien sûr mettre un $flag_preserver = true pour tout le
site, mais je voudrais l'éviter, d'autant que la doc
(http://www.spip.net/fr_article1902.html) indique:
La balise #HTTP_HEADER{argument} (depuis SPIP 1.9) permet de modifier
l’entête HTTP de la page retournée par SPIP. Exemple :
#HTTP_HEADER{Content-Type: text/css}. Attention ! Le fait d’utiliser
cette balise supprime les boutons d’administration.
Et dans mon cas ça ne marche pas puisque le #HTTP_HEADER est présent
et que les boutons admin le sont aussi.
Ce qui est surprenant c'est que si j’enlève
Content-Disposition: attachment;
filename=[export_de_(#TITRE*|textebrut|replace{" ","_"}).xml];
du #HTTP_HEADER, les boutons admin ne sont plus présents dans la page
(mais elle s'affiche par contre dans le navigateur alors que je
voudrais que ce soit le formulaire de sauvegarde qui s'affiche). À
noter que si je les mets après "Content-Type" le header ne semble plus
envoyé du tout (la page est affichée comme du text/html)...
Bref on dirait qu'il faut que le header *commence* par "Content-type"
pour que $flag_preserver" soit à true pour la page (ce qui est
contradictoire avec: http://www.spip.net/fr_article4631.html qui
indique qu'on peut produire un CSV avec SPIP... Un CSV avec les
boutons admin risque de mal fonctionner)...
J'ai essayé de scruter un peu du côté d'ecrire/assembler.php et j'ai
constaté que dans le cas de mon squelette, $flag_preserver était à
false même après la ligne 116 qui contient:
$flag_preserver |= headers_sent();
je n'ai pas trop compris comment ça marche ni comment $flag_preserver
était mis à true quand il y a un header défini, puisque la fonction
qui semble gérer ça: auto_content_type est qualifiée de superflue dans
les commentaires... alors ça doit être géré ailleurs, mais j'ai pas
trouvé où !
Alors je me demandais si c'était un bug et si je faisais un ticket ???
En attendant très bonne fêtes à tous !