IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MVC PHP Discussion :

Tbs ou phpodt en MVC


Sujet :

MVC PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    A la découverte de la POO
    Inscrit en
    Mai 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : A la découverte de la POO

    Informations forums :
    Inscription : Mai 2009
    Messages : 93
    Par défaut Tbs ou phpodt en MVC
    Bonjour à 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 c'est une autre histoire,

    Voila ou j'en suis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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 comme ceci :
    '###'#######mimetypeapplication/vnd.oasis.opendocument.textPK#########¦ë>################Configurations2/

    la ou mon fichier original n'en comporte qu'une, comme si je n'avais pas le bon en tête...

    En procédural, je fais un lien vers une page qui contient juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $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.

    Quelqu'un a une idée de mon problème ?

  2. #2
    Nouveau candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 2
    Par défaut
    Je pense que le problème vient du fait que tu envoies deux fois les en-têtes HTTP : une fois avec Zend, et une fois avec la méthode exportAsAttachedFile de l'objet odf.

    Essaie d'envoyer toi même les en-têtes en précisant le nom du fichier à télécharger (en tête Content-Disposition) et d'afficher le contenu de ton objet odf en tant que chaine de caractères directement (en castant) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public function monAction()
    {
        $odf = new odf("mon_fichier_template.odt");
        $npv = "123456";
        $serv = "Hello";
     
        $this->_helper->layout()->disableLayout();
        $this->_helper->viewRenderer->setNoRender();
        $this->getResponse()
            ->setHeader( 'Content-Type', 'application/vnd.oasis.opendocument.text', true );
            ->setHeader( 'Content-Disposition', 'attachment; filename="mon_fichier.odt"', true )
            ->appendBody( (string)$odf );
    }

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 2
    Par défaut
    J'ai épluché le fichier odf.php, et je pense avoir trouvé ta solution. Il faut sauvegarder le contenu de ton fichier ODT dans un fichier temporaire en utilisant la méthode saveToDisk sans argument, et ensuite envoyer son contenu avec Zend. On peut récupérer le nom du fichier temporaire avec la méthode getTmpfile de l'objet odf. Voilà le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public function monAction()
    {
        $odf = new odf("mon_fichier_template.odt");
        // Manipulations diverses
        $odf->saveToDisk();
     
        $this->_helper->layout()->disableLayout();
        $this->_helper->viewRenderer->setNoRender(true);
        $this->getResponse()
             ->setHeader( 'Content-Type', 'application/vnd.oasis.opendocument.text', true );
             ->setHeader( 'Content-Disposition', 'attachment; filename="mon_fichier.odt"', true )
             ->appendBody( file_get_contents( $odf->getTmpfile() ) );
    }
    EDIT: la méthode setNoRender doit prendre comme paramètre true

  4. #4
    Membre confirmé
    Homme Profil pro
    A la découverte de la POO
    Inscrit en
    Mai 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : A la découverte de la POO

    Informations forums :
    Inscription : Mai 2009
    Messages : 93
    Par défaut Solution
    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 !



    Un grand merci à Geektof

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/02/2009, 12h06
  2. [GEF]GEF EditViewPart MVC etc...
    Par georgemel dans le forum Eclipse Platform
    Réponses: 4
    Dernier message: 19/07/2007, 19h07
  3. [MVC][JAVABEAN][JSP]
    Par phileme dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 12/07/2004, 10h22
  4. [MVC] Différences entre les framework MVC push et pull ?
    Par XavierZERO dans le forum Frameworks Web
    Réponses: 5
    Dernier message: 15/01/2004, 13h12
  5. Classe abstraite / MVC
    Par caramel dans le forum MVC
    Réponses: 5
    Dernier message: 01/04/2003, 09h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo