2011-10-02 10 views
7

Ho un file php sotto protetto/views/directory_controller_name con la formattazione del genereYii recuperare e memorizzare in una variabile di un file renderPartial

<p> 
<?php echo $model->title;?> 
</p> 
... 

visualizzo il file con metodo classico nel controller:

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

Ma so, ho bisogno di inviare una e-mail con lo stesso modello/layout in modo che voglio conservare il rendering di file in una variabile come

$ msgHTML = $ this-> render Interno ('_ items', array ('model' => $ model));

But it doesn't work! 

Come posso ottenere il rendering vista da un file e conservare in una variabile? È possibile?

Non voglio usare:

$msgHTML = '<p>'.$model->title.'</p>' 
... 

Poiché il file è molto lunga e non voglio duplicare il codice !!!

risposta

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

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

+1

finalmente io uso questo: $ msgHTML = $ this-> renderFile ('protected/views/modelname/_items.php', array ('model' => $ model), TRUE); – BasicCoder

+0

sì, hai ragione, renderInternal richiede percorso completo/nome file inclusa estensione - ho solo aggiunto il terzo argomento che risolve il problema principale, tx per chiarimenti. – ldg

2

potrei mancare qualcosa, ma non puoi semplicemente usare normale render() con l'argomento di ritorno impostata su true? Quindi puoi semplicemente usare una vista 'nome' invece di conoscere il percorso. (E a meno che il mio logger di traccia stack affidabile non funzioni, renderFile e renderInternal prendono lo stesso argomento di percorso completo.) Almeno posso vedere renderPartial() passare il percorso completo al mio file di visualizzazione per renderFile.)

17

Non utilizzare il metodo renderInternal, utilizzare invece renderPartial. Render internal è un metodo di basso livello e non dovrebbe essere usato in tale contesto. Per catturare l'output solo impostare il parametro $ ritorno true:

<?php $theOutput=$this->renderPartial('_subView', $dataArray, true); ?> 
0

si può fare questo con questi modi

1), se si desidera ottenere l'uscita con intestazione e piè di pagina (ad esempio) il layout completo quindi fare questo

//add true in the last parameter if you want a return of the output 
$htmloutput=$this->render('_pdfoutput',array('data'=>'nothing'),true); 

2) Allo stesso modo, se non si desidera ottenere i file di layout basta usare renderpartial nello stesso modo

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

otterrete l'html dei file nella variabile. usa questo ovunque

Problemi correlati