7 votes

Yii Récupérer et stocker dans une variable un fichier renderPartial

J'ai un fichier php sous protected/views/directory_controller_name avec un formatage comme suit

title;?>

...

Je affiche le fichier avec la méthode classique dans le contrôleur :

$this->render('filename',array('model'=>$model));

Mais maintenant, je dois envoyer un e-mail avec le même modèle/disposition donc je veux stocker le rendu du fichier dans une variable comme suit

$msgHTML = $this->renderInternal('_items', array('model'=>$model));

Mais ça ne fonctionne pas!

Comment puis-je obtenir le rendu de la vue à partir d'un fichier et le stocker dans une variable ?Est-ce possible ?

Je ne veux pas utiliser :

$msgHTML = ''.$model->title.''
...

Parce que le fichier est très long et je ne veux pas dupliquer le code !!!

18voto

mike Points 580

N'utilisez pas la méthode renderInternal, utilisez plutôt renderPartial. Render internal est une méthode de bas niveau et ne doit pas être utilisée dans un tel contexte. Pour récupérer la sortie, définissez simplement le paramètre $return sur true :

renderPartial('_subView', $dataArray, true); ?>

7voto

ldg Points 3588
$msgHTML = $this->renderInternal('_items', array('model'=>$model), true);

http://www.yiiframework.com/doc/api/1.1/CBaseController#renderInternal-detail

(Note: No translation needed as the content is a URL)

2voto

grantwparks Points 716

Je pourrais manquer quelque chose, mais ne pouvez-vous pas simplement utiliser render() normal avec l'argument de retour défini sur true? Ensuite, vous pouvez simplement utiliser un nom de vue au lieu de connaître le chemin. (Et sauf si mon fidèle enregistreur de traces de pile est cassé, renderFile et renderInternal prennent le même argument de chemin entièrement qualifié. Au moins je peux voir renderPartial() passer le chemin complet vers mon fichier de vue à renderFile.)

0voto

Manoj Dhiman Points 4896

Vous pouvez le faire de ces façons

1) si vous souhaitez obtenir la sortie avec en-tête et pied de page (c'est-à-dire en plein écran) alors faites ceci

//ajoutez true dans le dernier paramètre si vous voulez un retour de la sortie
$htmloutput=$this->render('_pdfoutput',array('data'=>'rien'),true);

2) de la même manière, si vous ne voulez pas récupérer les fichiers de mise en page, utilisez simplement renderpartial de la même manière

$htmloutput=$this->renderpartial('_pdfoutput',array('data'=>'rien'),true);

vous obtiendrez le html des fichiers dans la variable. utilisez ceci n'importe où

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X