2010-09-27 9 views
6

Problema: a volte nel nostro controller zend non vogliamo che lo script venga emesso direttamente, ma piuttosto voglia il contenuto di quello script. Un esempio: quando abbiamo bisogno dell'output html di risultato di uno script di visualizzazione essere incluso in un'altra struttura come JSON o XML per l'elaborazione sul lato client.Come acquisire un output vista Zend invece di emetterlo effettivamente

Ho trovato il risultato qui in overflow dello stack, ma non così veloce poiché era in un contesto diverso. Ho lottato con questo per 2 giorni ora. Come si è scoperto che era molto semplice:

// in our controllers' action method 
    $this->_helper->layout()->setLayout('empty'); // disable layout 
    $this->_helper->viewRenderer->setNoRender(true); // make sure the script is not being rendered 

    // any of your code here 
    $html = $this->view->render('projects/climate.phtml'); // return the view script content as a string 
    $json = array('html'=>$html, 'initData'=>'my other needed data'); 
    echo json_encode($json); 

Spero che questo era chiaro e sarà utile a qualcuno.

+1

Hi slave. Siete invitati a condividere le vostre conoscenze qui, ma questo è un sito di domande e risposte. Dovresti postarlo come commento o risposta alla domanda originale. – takeshin

+0

Questo è quello che farò. – Slavic

risposta

9

Prova utilizzando

public myAction() { 
    $this->_helper->json(array(
     'html' => $this->view->render('projects/climate.phtml'), 
     'initData'=> 'my other needed data', 
    )); 
} 

Helper azione JSON normalmente

  • disabilitare il viewRenderer
  • disattivare il layout
  • json_encode matrice
+0

Serbatoi Julien! La tua versione è un po 'più sottile. – Slavic

Problemi correlati