Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 05-12-2011 10:20:22

manuzed78
Membre
Date d'inscription: 13-12-2009
Messages: 86
Site web

[résolu] MVC - Layout - Génération de fichier - en tete corrompu

Hello à tous,
voulant générer un odt avec des données, je veux utiliser la bibliothèque odtphp
en procédural pas de problème mais avec Zend,
il me sort mon menu sans le css ...

Dans la doc il est effectivement dit :
Attention, avant d'appeler cette méthode, assurez-vous que les entêtes HTTP n'ont pas déjà été envoyées

Et c'est la je pense que ça part en vrille big_smile

sachant que j'utilise un layout, comment lui dire : Hey Zend, laisse le layout de coté pour ce controller /action ?

J'ai bien essayé ça :
$this->_helper->layout()->disableLayout();
   $this->_helper->viewRenderer->setNoRender(true);

qui semble fonctionner mais mon odt reste illisible avec ce genre de caractères :
'###'#######mimetypeapplication/vnd.oasis.opendocument.textPK#########¦ë>################Configurations2/statusbar/PK#########¦ë>############'###Configurations2/accelerator/current.xml##PK#########¦ë>################Configurations2/floater/PK#########¦ë>################Configurations2/popupmenu/PK#########¦ë>################Configurations2/progressbar/PK#########¦ë>################Configurations2/toolpanel/PK#########¦ë>################Configurations2/menubar/PK#########¦ë>################Configurations2/toolbar/PK#########¦ë>################Configurations2/images/Bitmaps/PK#########¦ë>æÆ#Oô#######

Dernière modification par manuzed78 (07-12-2011 16:15:13)

Hors ligne

 

#2 05-12-2011 10:40:53

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [résolu] MVC - Layout - Génération de fichier - en tete corrompu

Hello,

Dans ton action:

Code:

public function monAction()
{
    // désactive les layouts pour cette action
    $this->_helper->layout->disableLayout();
    // Désactivation du rendu automatique
    $this->_helper->viewRenderer->setNoRender();

    // ... ton code
}

@+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#3 05-12-2011 11:05:42

manuzed78
Membre
Date d'inscription: 13-12-2009
Messages: 86
Site web

Re: [résolu] MVC - Layout - Génération de fichier - en tete corrompu

mikaelkael a écrit:

Hello,

Dans ton action:

Code:

public function monAction()
{
    // désactive les layouts pour cette action
    $this->_helper->layout->disableLayout();
    // Désactivation du rendu automatique
    $this->_helper->viewRenderer->setNoRender();

    // ... ton code
}

@+

Merci Mickaelkael

tu me confirmes que le $this->_helper->layout->disableLayout(); enlève bien les entetes http ?

si c'est le cas alors je ne comprends pas pourquoi il m'est impossible de générer un odt

Code:

public function monAction()
{
    $this->_helper->layout->disableLayout();
     $this->_helper->viewRenderer->setNoRender();
     $odf = new odf("monfichier.odt");
    $mavariable = "test";
    $odf ->exportAsAttachedFile();
}

Cela marche niquel en procédural mais pas en Zend   hmm
De quoi cela pourrai t il venir d'autre si ce n'est l'en tete http ?

Hors ligne

 

#4 05-12-2011 11:35:23

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [résolu] MVC - Layout - Génération de fichier - en tete corrompu

Hello,

Je te le confirme cependant il ne faut pas que la génération de l'odt plante sinon tu ne verras rien. Que te donnes firebug comme réponse http ?

@+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#5 05-12-2011 12:26:15

Roromix
Membre
Date d'inscription: 05-12-2011
Messages: 55

Re: [résolu] MVC - Layout - Génération de fichier - en tete corrompu

Il faut que tu définisse le Header HTTP avec le bon type.

Code:

$this->getResponse()->setHeader('Content-Type', 'application/vnd.oasis.opendocument.text', true);

Dernière modification par Roromix (05-12-2011 12:26:59)

Hors ligne

 

#6 05-12-2011 13:45:33

manuzed78
Membre
Date d'inscription: 13-12-2009
Messages: 86
Site web

Re: [résolu] MVC - Layout - Génération de fichier - en tete corrompu

mikaelkael a écrit:

Hello,

Je te le confirme cependant il ne faut pas que la génération de l'odt plante sinon tu ne verras rien. Que te donnes firebug comme réponse http ?

@+

Bon alors je suis bien embeté car je n'ai RIEN sur Firebug ...
je vide firebug
puis je click sur mon lien qui mène vers l'action qui génère mon odt
mon odt est bien généré (enfin il m'ouvre les options de filtre ASCII car j'ai toujours des pages de hieroglyphes)

mais Firebug reste désespérément vierge...

En fait, sur chacune de mes pages je vois dans l'onglet html que le code se rafraîchi.
Mais quand je click sur la génération de l'odt, firebug ne se rafraichi pas...


Merci Roromix

j'ai essayé avec le
$this->getResponse()->setHeader('Content-Type', 'application/vnd.oasis.opendocument.text', true);

mais il n'en veut pas, j'ai essayé en enlevant les
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();

Mais rien à faire, mon odt est toujours mal formé (avec  filtre ASCII à l'ouverture)

Hors ligne

 

#7 05-12-2011 14:32:16

Roromix
Membre
Date d'inscription: 05-12-2011
Messages: 55

Re: [résolu] MVC - Layout - Génération de fichier - en tete corrompu

tu voudrais qu'il lance le téléchargement du fichier peut-être ?

Hors ligne

 

#8 05-12-2011 14:38:51

manuzed78
Membre
Date d'inscription: 13-12-2009
Messages: 86
Site web

Re: [résolu] MVC - Layout - Génération de fichier - en tete corrompu

Roromix a écrit:

tu voudrais qu'il lance le téléchargement du fichier peut-être ?

Oui, pour le téléchargement, pas de soucis.
Pour l'instant j'en suis à

Code:

public function monAction()
{
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$this->getResponse()->setHeader('Content-Type', 'application/vnd.oasis.opendocument.text', true);
$odf = new odf("mon_fichier_template.odt");

                $npv = "123456";
                $serv = "Hello";
                $odf->exportAsAttachedFile();
        
}

Je télécharge bien mon odt mais je ne retrouve rien de mon template (et encore moins mes variables de test) et surtout, le fichier possède entre 40 et 150 pages avec 1 à 10 lignes de caractères chinois par page
la ou mon fichier original n'en comporte qu'une  big_smile

Edit : en procédural, je fais un lien vers une page qui contient juste
$odf = new odf("mon_fichier_template.odt");

                $npv = "123456";
                $serv = "Hello";
                $odf->exportAsAttachedFile();
ainsi que l'include bien sur et hop, je retrouve mon template avec mes variables.

Dernière modification par manuzed78 (05-12-2011 14:57:19)

Hors ligne

 

#9 05-12-2011 17:49:06

manuzed78
Membre
Date d'inscription: 13-12-2009
Messages: 86
Site web

Re: [résolu] MVC - Layout - Génération de fichier - en tete corrompu

mikaelkael a écrit:

Hello,

Que te donnes firebug comme réponse http ?

@+

Voila ce que j'ai reussi à extirper :
Date    Mon, 05 Dec 2011 16:43:54 GMT
Server    Apache/2.2.17 (Win32) PHP/5.3.4
X-Powered-By    PHP/5.3.4
Expires    0
Cache-Control    public
Pragma    no-cache
Content-Disposition    attachment; filename="2011-12-5__Bordereau.odt"
Content-Description    File Transfer
Content-Transfer-Encoding    binary
Content-Length    20929
Keep-Alive    timeout=5, max=96
Connection    Keep-Alive
Content-Type    application/vnd.oasis.opendocument.text

mais quand je click sur "voir le code source"  :
HTTP/1.1 200 OK
Date: Mon, 05 Dec 2011 16:43:54 GMT
Server: Apache/2.2.17 (Win32) PHP/5.3.4
X-Powered-By: PHP/5.3.4
Expires: 0
Cache-Control: public
Pragma: no-cache
Content-Disposition: attachment; filename="2011-12-5__Bordereau.odt"
Content-Description: File Transfer
Content-Transfer-Encoding: binary
Content-Length: 20929
Keep-Alive: timeout=5, max=96
Connection: Keep-Alive
Content-Type: application/vnd.oasis.opendocument.text


ceci a été généré avec tbs  (meme combat que odtphp )

Code:

$TBS = new clsTinyButStrong;
        $TBS->Plugin( TBS_INSTALL, OPENTBS_PLUGIN );
       
        $data = array();
        $data[] = array( 'ma_variable' => $ma_variable );
       
        $TBS->LoadTemplate( APPLICATION_PATH . '\..\library\tbs_plugin_opentbs_1.7.4\tbs.odt' );
        $TBS->MergeBlock( 'a', $data );
        $TBS->PlugIn( OPENTBS_DELETE_COMMENTS );
        $numpv = str_replace( '/', '-', $_numpv );
        $filename = date( 'Y-m-j' ) . "_" . $numpv . "_Bordereau.odt";
       
        $TBS->Show( OPENTBS_DOWNLOAD, $filename );

Dernière modification par manuzed78 (05-12-2011 17:50:37)

Hors ligne

 

#10 06-12-2011 11:34:44

manuzed78
Membre
Date d'inscription: 13-12-2009
Messages: 86
Site web

Re: [résolu] MVC - Layout - Génération de fichier - en tete corrompu

Comme cela marche niquel en procédural,
je me demande s'il n'y a pas un moyen de zapper le mvc pour ce cas précis ?
dans ma vue j'ai essayé :

Code:

<td><a href="<?php echo APPLICATION_PATH .'test.php' ?>">
      <?php  echo $this->escape( $scelle['num_pv'] ); ?></a></td>

pour pointer directement sur mon fichier php qui génère l'odt
quand je passe la souris dessus, il pointe bien vers mon_projet/application/controllers/test.php
je place mon fichier test.php avec mes controllers
mais FF affiche "Firefox ne sait pas ouvrir cette adresse car le protocole (c) n'est associé à aucun programme."

ai je un moyen de contourner ce problème et de faire un liendirect vers un fichier php à l'ancienne ?

Hors ligne

 

#11 07-12-2011 15:40:52

manuzed78
Membre
Date d'inscription: 13-12-2009
Messages: 86
Site web

Re: [résolu] MVC - Layout - Génération de fichier - en tete corrompu

Réponse pour ceux qui galèrent comme moi big_smile

Le fichier odt  doit commencer par les caractère "PK" (hexa="50.4B") or
mon fichier généré commence par une séquence d' octets EF.BB.BF (parfois répetés 5 fois). Cette séquence "EF.BB.BF" est en fait la marque BOM qu'on ajoute au début des fichiers pour indiquer que c'est de l'UTF-8.

Si tu ouvres le fichier résultat sous un éditeur hexa et que tu retires cette séquence, alors on peut l'ouvrir sous OpenOffice sans problème ...

SOLUTION convertir les scripts en utf8 sans BOM
(c'est possible dans notepad++) sauf qu'il faut aussi le faire pour la bibrairie Zend ... sad

BONUS pour les linuxiens :

find /chemin/vers/sources -type f -exec sed -i -e '1 s/\xEF\xBB\xBF//' {} \; -print

la commande qui va tout faire tout seul ... et en moins de 1 minute !

Hors ligne

 

#12 07-12-2011 16:05:39

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [résolu] MVC - Layout - Génération de fichier - en tete corrompu

Hello,

La librairie Zend n'a pas de BOM. Ils proviennent de tes fichiers.

@+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#13 07-12-2011 16:14:15

manuzed78
Membre
Date d'inscription: 13-12-2009
Messages: 86
Site web

Re: [résolu] MVC - Layout - Génération de fichier - en tete corrompu

mikaelkael a écrit:

Hello,

La librairie Zend n'a pas de BOM. Ils proviennent de tes fichiers.

@+

Ha oui j'hésitais car j'ai commencé sur mes fichiers et cela ne marchait pas, j'ai donc tout fait avec librairie Zend) et cela a marché.
Mais effectivement un oubli dans mes fichiers a du intervenir big_smile

Hors ligne

 

#14 07-12-2011 16:16:10

manuzed78
Membre
Date d'inscription: 13-12-2009
Messages: 86
Site web

Re: [résolu] MVC - Layout - Génération de fichier - en tete corrompu

manuzed78 a écrit:

mikaelkael a écrit:

Hello,

La librairie Zend n'a pas de BOM. Ils proviennent de tes fichiers.

@+

Ha oui j'hésitais car j'ai commencé sur mes fichiers et cela ne marchait pas, j'ai donc tout fait ( avec librairie Zend) et cela a marché.
Mais effectivement un oubli dans mes fichiers a du intervenir big_smile

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