2011-01-04 9 views
0

ich ein bisschen Problem mit Smarty haben, Zend und gzip-Codierung I erweitert die Smarty KlasseSmarty Template Engine und gzip-Codierung

//This method i call in one front controller plugin 
$this->getResponse()->setHeader('Content-Encoding' , 'gzip'); 

View extends Zend_View_Abstract implements Zend_View_Interface { 

    public $_smarty; 

    public function __construct(){ 

     $this->_smarty = new Smarty(); 
     //Hire i have some smarty options paths and etc. 
     //------------------ 
     //I register this object to smarty template 
     $this->_smarty->registerObject('Smarty', $this); 

     //You can see this pulugin at this address 
     //http://smarty.incutio.com/?page=GZipPlugin 
     $this->_smarty->loadFilter('output', 'gzip'); 

    } 


    public function Fetch($tpl){ 
     retutn $this->_smarty->fetch($tpl); 
    } 

    //Zend call this method after loaded controller and display active controller tpl 
    public function Render($tpl){ 
     retutn $this->_smarty->display($tpl); 
    } 

    public function Header($params, &$smarty){ 
     $this->_smarty->display('header.tpl'); 
    } 


} 

Ok ... in meinem index.tpl nenne ich die Funktion { Site-> header} und mein Browser chrome den Fehler werfen:

Server error. 

The website encountered an error while retrieving http://site.dev. It may be down for maintenance or configured incorrectly. 

ich habe versucht, mit holen zu laden wie:

echo $this->_smarty->fetch('header.tpl'); 

aber ich habe den gleichen Fehler, wenn ich die Out-Put-Fillter-Site entfernt.

Wenn mir jemand helfen kann, würde ich es sehr schätzen. Sorry, wenn mein Englisch nicht sehr gut ist. Vielen Dank im Voraus.

+0

Sie Smarty nicht verwenden. PHP ist bereits eine Vorlagensprache und Zend_View gibt Ihnen eine gute Möglichkeit, es zu benutzen. – mfonda

Antwort

0

Ich stimme mit mfonda, nicht mit Smarty.

Ich benutze dieses Plugin-Klasse verwenden, um meine ganze Körperreaktion gzip bei Bedarf:

class Lib_Controller_Plugin_Gzip extends Zend_Controller_Plugin_Abstract 
{ 
    public function dispatchLoopShutdown() 
    { 
     $content = $this->getResponse()->getBody(); 

     $content = preg_replace(
        array('/(\x20{2,})/', '/\t/', '/\n\r/'), 
        array(' ',  ' ', ' '), 
        $content 
       ); 

     if (@strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') === FALSE) 
      $this->getResponse()->setBody($content); 
     else 
     { 
      header('Content-Encoding: gzip'); 
      $this->getResponse()->setBody(gzencode($content, 9)); 
     } 
    } 
} 

Beachten Sie die Verwendung von dispatchLoopShutdown wegen this post.

Die Klasse von this post angepasst wurde, fand ich von Google mit

+0

Ok, ich habe den Smarty aus meinem System entfernt. – Alex