[spip-dev] Exporter le résultat d'une boucle en csv

Bonjour,

Dans Formidable (qui porte bien son nom), je souhaite exporter les
résultats d'un formulaire. Je ne peux pas utiliser l'export de
Formidable car je souhaite formater le csv d'une façon particulière
(pour faire court, le formulaire collecte des inscriptions à un ou
plusieurs évènements pour une personne, l'export standard donne cette
personne suivi de X inscriptions remplies et Y vides, je remets tout ça
en forme pour avoir X lignes pour cette personne ... j'espère avoir été
clair ...)

La mise en forme est faite, j'affiche tout ça sans souci, je souhaiterai
maintenant que ça devienne un csv qui se télécharge de façon à ce que le
gestionnaire aille juste sur cette url https://domaine.com/csv.html ,
csv.html contenant la boucle nécessaire à la mise en forme souhaitée, et
que ça lui propose direct d'enregistrer le csv sur son ordi ...

Mon code (j'ai supprimé tout le formatage), j'ai juste laissé 2 lignes:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/csv; charset=utf-8" />
<meta http-equiv="Content-Disposition" content="attachment;
filename=ins-conc_[(#DATE|date_iso)].csv" />
<meta http-equiv="pragma" content="no-cache" />
<meta name="expires" content="0" />
<meta name="robots" content="noindex, nofollow" />
</head>
<body>
<BOUCLE_concours (FORMULAIRES_REPONSES) {id_formulaire=10}>
<br>

CSI a écrit le 15/07/2020 à 15:03 :

Bonjour,

Dans Formidable (qui porte bien son nom), je souhaite exporter les
résultats d'un formulaire. Je ne peux pas utiliser l'export de
Formidable car je souhaite formater le csv d'une façon particulière
(pour faire court, le formulaire collecte des inscriptions à un ou
plusieurs évènements pour une personne, l'export standard donne cette
personne suivi de X inscriptions remplies et Y vides, je remets tout ça
en forme pour avoir X lignes pour cette personne ... j'espère avoir été
clair ...)

La mise en forme est faite, j'affiche tout ça sans souci, je souhaiterai
maintenant que ça devienne un csv qui se télécharge de façon à ce que le
gestionnaire aille juste sur cette url Domaine Carneros: California Sparkling Wine & Pinot Noir ,
csv.html contenant la boucle nécessaire à la mise en forme souhaitée, et
que ça lui propose direct d'enregistrer le csv sur son ordi ...

Tu as regardé

Bonjour,

CSI a écrit le 15/07/2020 à 15:03 :

Bonjour,

Dans Formidable (qui porte bien son nom), je souhaite exporter les
résultats d'un formulaire. Je ne peux pas utiliser l'export de
Formidable car je souhaite formater le csv d'une façon particulière
(pour faire court, le formulaire collecte des inscriptions à un ou
plusieurs évènements pour une personne, l'export standard donne cette
personne suivi de X inscriptions remplies et Y vides, je remets tout ça
en forme pour avoir X lignes pour cette personne ... j'espère avoir été
clair ...)

La mise en forme est faite, j'affiche tout ça sans souci, je souhaiterai
maintenant que ça devienne un csv qui se télécharge de façon à ce que le
gestionnaire aille juste sur cette url Domaine Carneros: California Sparkling Wine & Pinot Noir ,
csv.html contenant la boucle nécessaire à la mise en forme souhaitée, et
que ça lui propose direct d'enregistrer le csv sur son ordi ...

Tu as regardé
Spout_SPIPCSV : export CSV amélioré pour SPIP - SPIP-Contrib

Non je vais regarder ! Merci.

Hop,

Le code ci-dessus affiche le résultat dans le navigateur :frowning: il ne
télécharge pas le résultat ... pourtant c'est du code que j'utilise dans
un projet PHP et ça marche .. Y-a-t-il une interaction SPIP que j'oublie
et qui empêche ça de fonctionner ?

Il faut que tu utilises la balise http_header pour ça, exemple #HTTP_HEADER{Content-Type: text/csv; charset=#CHARSET} et un autre exemple pour forcer le download dans geodiversité cf geodiversite/geol_kml.html at master · geodiversite/geodiversite · GitHub

De mon côté, voici comment je fais pour réaliser des squelettes d'export CSV en utilisant l'API de inc/exporter_csv :

dans mon squelette export_csv.html

#HTTP_HEADER{Content-Type: text/csv; charset=#CHARSET}
[(#SESSION{statut}|=={0minirezo}|sinon_interdire_acces)]
[(#SET{items,#ARRAY})]
<BOUCLE_items(ARTICLES){id_rubrique=#CONFIG{avp/rub_fiches,1385}}{par titre}>
[(#SET{items,#GET{items}|push{#LISTE{#TITRE*,
#PRENOM*,
#ACTIVITE_NOM*,
#ACTIVITE_DESC*,
#COMMUNE*,
#TEL,
#EMAIL}}})]
</BOUCLE_items>
[(#VAL{export}|inc_exporter_csv_dist{#GET{items},';',#LISTE{nom,prenom,activite_nom,activite_desc,commune,tel,email}})]
</B_items>

et dans exprt_csv_fonctions.php

<?php

if (!defined('_ECRIRE_INC_VERSION')) {
  return;
}

include_spip('inc/exporter_csv');

Ainsi on génère le CSV à partir d'un array.

Bonjour,

Oui c'est #HTTP_HEADER qui me manquait, je l'avais oubliée celle-là :slight_smile: