Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 18-05-2010 17:44:25

Wiinner
Membre
Date d'inscription: 31-03-2010
Messages: 26

[Résolu] Problème export CSV

Bonjour tout le monde,
alors aujourd'hui, j'ai un problème d'export CSV, et çà fait plusieurs heures que je m'arrache la tête dessus.

Dans ma vue, j'ai un lien export CSV, qui appelle une function javascript/jquery :
Je lui passe en paramètre mes données à exporter au format csv (je lui passe en json).

Voici le Json passé en paramètre

Code:

{"0": [ "nom_eleve", "prenom_eleve", "nom_parent", "prenom_parent", "adresse", "date" ],"1": ["Test","Test","Test","Test","xxxxxx",""],"2": ["","","Test","Test","xxxxxx",""]}

J'ai vérifié sous json lint, il est valide, pas de souci.
L'action déclenché dans mon controlleur est :

Code:

public function printcsvAction()
    {
        $this->_helper->layout->disableLayout(); 
        $this->_helper->viewRenderer->setNeverRender();
        
        //$this->_helper->viewRenderer->setNoRender();
        
        $json = $this->_getParam('liste');
        $json = stripslashes($json);
        //$json = utf8_encode($json);
        
        $liste = json_decode($json, true);
        
        $csv = '';
        foreach($liste as $ligne) {
            foreach($ligne as $enregistrement) {
                $csv .= $enregistrement.';';
            }
            $csv.="\n";
        }
        

    header("Content-Type: application/csv-tab-delimited-table");
    header("Content-disposition: attachement; filename=nom_fichier.csv");
        
    print($csv);
        
    }

Le résultat de ma requête ajax est un succès (çà passe par success).
Mais çà ne me propose pas de télécharger le fichier, j'ai par contre via firebug vu le résultat de mon action.

La réponse est :

Code:

nom_eleve;prenom_eleve;nom_parent;prenom_parent;adresse;date;
Test;Test;Test;Test;xxxxxxx;;
;;Test;Test;xxxxxxx;;

(Oui il y a des fois des champs vide, mais c'est normal :p)

Je suis allé voir sur plein de sites pour changer les headers, tenté de les passer en force-download, etc ...
Rien à y faire.
Et apparemment, d'après le post http://www.z-f.fr/forum/viewtopic.php?id=5003
il est bien possible de ne pas passer par un fichier temporaire.
Je préfére en effet faire le csv à la volée.

PS : je changerais mon code en $this->getResponse()->setHeader(...) quand déjà çà marchera sous FF :p

Voila, aidez moi les gens smile je pete un cable.
Merci d'avance

Dernière modification par Wiinner (20-05-2010 15:19:04)

Hors ligne

 

#2 18-05-2010 18:05:27

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Résolu] Problème export CSV

il ne faut pas faire un appel ajax mais ouvrir l'url
il ne faut pas que ce soit l'objet XMLHTTPRequest qui fasse l'appel car sinon il lit le flux
il faut simplement faire un widows.location=
ainsi ton action est invoqué par le navigateur qui lui à le droit de télécharger

si ton action envoie une réponse genre

Code:

$this->_response->setHeader('Pragma' , 'public', true);
$this->_response->setHeader('Cache-Control', 'max-age=0', true);
$this->_response->setHeader('Content-Type', 'application/javascript; charset=iso-8859-1; name="' . $data->site_name . '"', true);
$this->_response->setHeader('Content-Transfer-Encoding', 'binary', true);
$this->_response->setHeader('Content-disposition', 'attachment; filename="'.$data->site_name.'.txt"', true);

alors le navigateur propose le chargement du fichier et ne change pas l'url de la page en cours
tu peux aussi si tu as peur que ça perturbe ta page ajouter un iframe caché et c'est sur ce dernier que tu mets ton url


n'oublie pas deux chose dans ton header

Code:

'Content-Type', 'application/javascript; charset=iso-8859-1; name="' . $data->site_name . '"'

avec le nom du fichier (pour IE dans certaine version)
et

Code:

'Content-disposition', 'attachment; filename="'.$data->site_name.'.txt"'

et le mot attachement qui est nécessaire. certain navigateur ne prennent pas le fichier s'il n'est pas là


A+JYT

Dernière modification par sekaijin (18-05-2010 18:08:38)

Hors ligne

 

#3 20-05-2010 15:18:52

Wiinner
Membre
Date d'inscription: 31-03-2010
Messages: 26

Re: [Résolu] Problème export CSV

Merci beaucoup.
En effet, comme tu le précisais, cela vient de l'ajax dans mon cas.
J'ai donc fait comme tu me l'as indiqué, et je suis passé par un window.location

Merci encore, je met en résolu.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages