2010-09-27 8 views
6

Problem: Manchmal möchten wir in unserem Zend-Controller nicht, dass das Skript direkt ausgegeben wird, sondern den Inhalt dieses Skripts. Ein Beispiel: Wenn wir das Ergebnis benötigen, muss die HTML-Ausgabe eines View-Skripts in einer anderen Struktur wie JSON oder XML zur Verarbeitung auf der Client-Seite enthalten sein.Wie man eine Zend-View-Ausgabe erfasst, anstatt sie tatsächlich auszugeben

Ich fand das Ergebnis hier bei Stapelüberlauf, aber nicht so schnell, da es in einem anderen Kontext war. Ich habe jetzt seit 2 Tagen damit zu kämpfen. Wie sich herausstellte war es sehr einfach:

// 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); 

Ich hoffe, das war klar, und wird an jemanden nützlich sein.

+1

Hallo slawischen deaktivieren. Sie können gerne Ihr Wissen hier teilen, aber dies ist eine Q & A-Site. Sie sollten es als Kommentar oder Antwort auf die ursprüngliche Frage veröffentlichen. – takeshin

+0

Das werde ich tun. – Slavic

Antwort

9

Versuche

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

JSON Action Helfer verwendet wird normalerweise

  • die deaktivieren viewRenderer
  • das Layout
  • json_encode das Array
+0

Tanks Julien! Deine Version ist etwas dünner. – Slavic