Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 13-01-2008 19:30:51

verrec_s
Membre
Lieu: Paris
Date d'inscription: 19-09-2007
Messages: 26

[Résolu] Récupérer en PHP l'équivalent HTML d'une view

Bonjour,

je reviens de nouveau vers vous pour vous demander un peu d'aide.

Mon problème est le suivant : j'ai une vue avec un rendu lié à un premier controleur "newsletter/display" qui me permet d'afficher une newsletter.
J'aurai besoin de de récupérer le HTML généré par cette vue afin de la stocker et généré un mail avec le code de cette page. Mais j'avoue que je ne trouve pas.

Quelqu'un peut-il m'aider ca serait bien gentil smile

Dernière modification par verrec_s (15-01-2008 20:33:42)

Hors ligne

 

#2 13-01-2008 19:49:39

TiTerm
Membre
Date d'inscription: 01-07-2007
Messages: 175

Re: [Résolu] Récupérer en PHP l'équivalent HTML d'une view

utilise ob_start au début de ta vue et ob_get_flush pour afficher en meme temps que récupérer le html. Charge a toi de le stocker où tu veux pour le traiter par la suite.

Hors ligne

 

#3 13-01-2008 19:52:19

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Récupérer en PHP l'équivalent HTML d'une view

Autre solution:

Pour récupérer le contenu HTML (la réponse quoi!) il suffit lors du dispatch() du front controller de le spécifié ainsi:

Code:

$frontController->returnResponse(true);
$response = $frontController->dispatch();

//$response->sendHeaders()->outputBody(); //Ca c'est la ligne en plus si t'as besoinde l'affiché en plus

Dans cette solution, ca t'aidera surement mais un autre problème se présentera peut être...

Hors ligne

 

#4 13-01-2008 23:49:05

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [Résolu] Récupérer en PHP l'équivalent HTML d'une view

La meilleure solution consiste à utiliser le tampon de sortie de PHP, via les fonctions ob.
Tu peux même passer une fonction de callback avec, ob_gzhandler, ob_tidyhandler , et autres ...

Hors ligne

 

#5 14-01-2008 22:19:57

verrec_s
Membre
Lieu: Paris
Date d'inscription: 19-09-2007
Messages: 26

Re: [Résolu] Récupérer en PHP l'équivalent HTML d'une view

Merci les gars pour ces précieux conseils. Je vais suivre la piste du ob.

J'avoue que je ne connaissais pas les fonctions ob_xxx et je me suis donc documenté sur le site de PHP.
Mais je sais pas pourquoi ca ne marche pas sad La page view s'affiche bien. Et rien n'a été stocké dans ma variable car le mail que je recois après est vide.

Voici mon code :

Code:

ob_start();
// Génération de la newsletter
$this->_helper->viewRenderer->setRender("displayNewsletter");
$this->render();
$content = ob_get_contents();        
ob_end_clean();
            
// Construction du mail
$mail->setBodyHtml($content);
$mail->setFrom('noreply@paradiz.org', "...");
$mail->addTo("stef@paradiz.org",  "stef@paradiz.org");            
$titre = "..."
$mail->setSubject($titre);
// Envoi de l'email 
$mail->send();

Hors ligne

 

#6 14-01-2008 23:23:40

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Récupérer en PHP l'équivalent HTML d'une view

Le problème d'utiliser ça avec le zf, c'est qu'il y'a a plusieurs ob_xxx déjà et donc plusieurs niveaux il me semble. J'avais essayé un fois pour gzipper mes pages mais pas réussi (car pas voulu chercher, j'en avais pas besoin car j'ai fais ça au niveau du serveur...).

Il y'a peut être moyen de choper un $this->view->render() dans une variable....

Hors ligne

 

#7 15-01-2008 08:36:24

TiTerm
Membre
Date d'inscription: 01-07-2007
Messages: 175

Re: [Résolu] Récupérer en PHP l'équivalent HTML d'une view

Les fonctions ob* fonctionnent très bien. Si tu as un soucis, c'est soit un pb d'utilisation, soit comme l'indique moox, un pb d'imbrication.

au lieu de ob_get_contents + ob_end_clean, tu peux faire un ob_get_clean, ce qui reviens au même.
Si tu veux etre sur qu'il y a bien eu quelque chose de généré, écrit le contenu du buffer dans un fichier temporaire.

Vérifie aussi le ob_get_level. Si jamais dans ton render, tu as un appel a ob_start, cela signifie qu'une buffurisation est démarré dans render() et que l'appel a ob_end_flush sera soit automatique en fin de script php, soit fait via une fonction de callback (ob_start('callback_fx').

Le viewrenderer ne fait pas de ob_start.
La fonction render fait un ob_start mais effectue un return ob_get_clean(), donc si tu as un level qui augmente, c'est vraisemblablement ton script displayNewsletter qui effectue des ob_start.

Encore une fois, les fonctions ob* sont vraiment robustes. Si tu as un pb avec, c'est très probablement un pb d'utilisation. Le seul truc pénible avec les fonctions ob*, c'est l'impossibilité d'utiliser certaines fonctions dans les fonctions de callback (en fait, toute les fonctions qui utilise ob* en interne tel que print_r() par exemple).
Mais ces impossibilités sont signalées dans la doc en générale.

Hors ligne

 

#8 15-01-2008 09:47:15

yannux
Membre
Lieu: Rennes
Date d'inscription: 07-04-2007
Messages: 284
Site web

Re: [Résolu] Récupérer en PHP l'équivalent HTML d'une view

C'est quand même pas bien pratique tout ça pour jute récupérer le contenue d'une vue :'(


Société : Direct Info Service

Hors ligne

 

#9 15-01-2008 19:14:40

ichevc02
Membre
Date d'inscription: 25-07-2007
Messages: 127

Re: [Résolu] Récupérer en PHP l'équivalent HTML d'une view

Bonjour,

moi j'utilise ca, mais dans le cas ou ce que je veux recuperer est le premier rendu demandé :

Code:

$this->_helper->viewRenderer->setNoRender();
$this->_helper->viewRenderer->setRender("tableauComptes");
try{
    $this->_helper->viewRenderer->render();
}catch(Exception $e){
Zend_Registry::get('logger')->log('updatelisteContrats ERREUR :'.$e->getMessage(), Zend_Log::ALERT);
}
$content = $this->getResponse()->getBody();
$this->getResponse()->clearBody(); // pour supprimer de la reponse ce que j'ai recuperé

C'est pas super propre mais comme ca je n'utilise que des éléments du zend.

Dernière modification par ichevc02 (15-01-2008 19:15:13)

Hors ligne

 

#10 15-01-2008 20:33:15

verrec_s
Membre
Lieu: Paris
Date d'inscription: 19-09-2007
Messages: 26

Re: [Résolu] Récupérer en PHP l'équivalent HTML d'une view

J'ai donc effectivement suivi la méthode de ichevc02 pour récupérer le code html généré par la view.

Encore un grand merci à tous pour l'aide. Ce site est vraiment indispensable lorsque comme moi on vient de se mettre au ZF 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