Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-07-2008 15:56:58

bucheron
Membre
Date d'inscription: 30-05-2008
Messages: 138

[résolu] comment récupérer un render courant dans une variable ?

Bonjour,

je souhaite depuis un controlleur récupérer le render courant dans une variable, est ce possible ?

La raison est simple, j'utilise Ajax pour faire l'appel à l'action. Comme retour  je souhaite passer un élément json qui contient un array avec un élément html qui correspond au render courant. Il y a bien entendu d'autres variables.

voila en gros mon code de l'action:

Code:

    echo Zend_Json::encode(array(
                                        "isValid"         => $isValid,
                                        "error"            => $error,
                                        "html"            => ""
                                    ));

Dernière modification par bucheron (09-07-2008 14:13:12)

Hors ligne

 

#2 08-07-2008 22:31:12

bucheron
Membre
Date d'inscription: 30-05-2008
Messages: 138

Re: [résolu] comment récupérer un render courant dans une variable ?

quelqu'un aurait il une idée ? car ça me bloque pas mal ce problème.

Dernière modification par bucheron (08-07-2008 22:31:35)

Hors ligne

 

#3 09-07-2008 10:34:17

thoas
Nouveau membre
Lieu: Paris, France
Date d'inscription: 02-03-2008
Messages: 8

Re: [résolu] comment récupérer un render courant dans une variable ?

hello,

C'est sûr ça n'a pas l'air de fonctionner directement dans le contrôleur en passant par "$this->render(script)".

En partant de cette hypothèse (voire conclusion si personne ne connait la réponse), il suffit juste de réinstancier une nouvelle view dans l'action.

En gros :

Code:

$view = new Zend_View();
$view->setScriptPath(PATH_SCRIPT);
$result = $view->render(SCRIPT_NAME);

De cette façon, tu auras le resultat dans "$result" en remplaçant bien entendu les variables PATH_SCRIPT et SCRIPT_NAME par tes informations.

Je trouve quand même bizarre que le $this->render() dans Zend_Controller_Action renvoie void (voir http://framework.zend.com/apidoc/core/) alors que celui de Zend_View renvoie une chaîne de caractères.

Bref.

[Edit: 09/07/07]

Si tu veux vraiment utiliser le $this->render() du Zend_Controller_Action tu peux te servir de ob_start(); pour mettre en tampon ce que tu veux vu qu'il fait l'affichage puis un ob_get_contents() pour récupérer le contenu.

C'est pas la meilleure méthode, je préfère l'option de la nouvelle Zend_View personnellement.

Dernière modification par thoas (09-07-2008 13:57:46)

Hors ligne

 

#4 09-07-2008 12:08:10

bucheron
Membre
Date d'inscription: 30-05-2008
Messages: 138

Re: [résolu] comment récupérer un render courant dans une variable ?

effectivement çà à l'air de marcher.

Par contre ne serait il pas possibeld e récupérer le PATH_SCRIPT depuis une fonction de render courant ?

Hors ligne

 

#5 09-07-2008 13:36:15

thoas
Nouveau membre
Lieu: Paris, France
Date d'inscription: 02-03-2008
Messages: 8

Re: [résolu] comment récupérer un render courant dans une variable ?

Tu peux oui, tu te positionnes dans le Zend_Controller_Action et tu fais un simple $this->view->getScriptPaths(); qui te rend un array.

Voir l'API -> http://framework.zend.com/apidoc/core/Z … rface.html

A savoir qu'il y a un $this->view->getScriptPath() apparemment (je le vois dans ZendStudio) mais non fonctionnel chez moi (function undefined).

Peut être qu'il le sera plus tard.

Hors ligne

 

#6 09-07-2008 14:12:58

bucheron
Membre
Date d'inscription: 30-05-2008
Messages: 138

Re: [résolu] comment récupérer un render courant dans une variable ?

chez moi il fonctionne, bizarre que chez toi non.
En ce qui me concerne j'utilise les layout, peut etre c'est à cause de ça.

En tout cas dans le tableau de retour j'ai:
0 => view script path vers le répertoire layout
1 => view script path basique.

En tout cas merci thoas pour ton aide 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