2011-01-04 3 views
0

Я немного проблема с Smarty, Zend и кодирование GZIP, я расширяет класс SmartySmarty Template Engine и Gzip кодирования

//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 ... в моей index.tpl я вызвать функцию { сайт-> заголовок} и мой браузер хром бросить ошибку:

Server error. 

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

я пытался загрузить с выборки, как:

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

, но у меня такая же ошибка, когда я удаляю выходной сайт заполнения.

Если кто-нибудь может мне помочь, я был бы очень признателен. Извините, если мой английский не очень хорош. Спасибо заранее.

+0

Не используйте Smarty. PHP уже является языком шаблонов, и Zend_View дает вам хороший способ его использования. – mfonda

ответ

0

Я согласен с mfonda, не использую Smarty.

Я использую использовать этот класс плагин для GZIP весь мой ответ тела, когда это необходимо:

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

Обратите внимание на использование dispatchLoopShutdown из this post.

Класс был адаптирован из this post я нашел с помощью Google

+0

Хорошо, я удалил smarty из своей системы. – Alex

Смежные вопросы