Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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
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
Hello,
Dans ton action:
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 }
@+
Hors ligne
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
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
De quoi cela pourrai t il venir d'autre si ce n'est l'en tete http ?
Hors ligne
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 ?
@+
Hors ligne
Il faut que tu définisse le Header HTTP avec le bon type.
$this->getResponse()->setHeader('Content-Type', 'application/vnd.oasis.opendocument.text', true);
Dernière modification par Roromix (05-12-2011 12:26:59)
Hors ligne
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
tu voudrais qu'il lance le téléchargement du fichier peut-être ?
Hors ligne
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 à
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
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
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 )
$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
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é :
<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
Réponse pour ceux qui galèrent comme moi
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 ...
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
Hello,
La librairie Zend n'a pas de BOM. Ils proviennent de tes fichiers.
@+
Hors ligne
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
Hors ligne
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
Hors ligne
Pages: 1