From 978dc9648c959b77365fed2d954e1bab54aa2e32 Mon Sep 17 00:00:00 2001 From: "ctrlaltca@gmail.com" <> Date: Tue, 14 Feb 2012 07:58:17 +0000 Subject: applied proposed patch for #389 --- framework/Web/UI/WebControls/TFlushOutput.php | 2 +- framework/Web/UI/WebControls/TOutputCache.php | 34 +++++++++++++++++++++++---- 2 files changed, 31 insertions(+), 5 deletions(-) (limited to 'framework/Web') diff --git a/framework/Web/UI/WebControls/TFlushOutput.php b/framework/Web/UI/WebControls/TFlushOutput.php index ab79fe0b..cc55646d 100644 --- a/framework/Web/UI/WebControls/TFlushOutput.php +++ b/framework/Web/UI/WebControls/TFlushOutput.php @@ -72,7 +72,7 @@ class TFlushOutput extends TControl */ public function render($writer) { -$writer->write(''); +//$writer->write(''); // ajax responses can't be parsed by the client side before loaded and returned completely, // so don't bother with flushing output somewhere mid-page if refreshing in a callback if (!$this->Page->IsCallback) diff --git a/framework/Web/UI/WebControls/TOutputCache.php b/framework/Web/UI/WebControls/TOutputCache.php index c9764454..37a1fd70 100644 --- a/framework/Web/UI/WebControls/TOutputCache.php +++ b/framework/Web/UI/WebControls/TOutputCache.php @@ -262,7 +262,7 @@ class TOutputCache extends TControl implements INamingContainer $this->_actions[]=array($context,$funcName,$funcParams); } - private function getCacheKey() + public function getCacheKey() { if($this->_cacheKey===null) $this->_cacheKey=$this->calculateCacheKey(); @@ -478,17 +478,18 @@ class TOutputCache extends TControl implements INamingContainer $writer->write($this->_contents); else if($this->_cacheAvailable) { - $htmlWriter = Prado::createComponent($this->GetResponse()->getHtmlWriterType(), new TTextWriter()); + $textwriter = new TTextWriter(); + $multiwriter = new TOutputCacheTextWriterMulti(array($writer->getWriter(),$textwriter)); + $htmlWriter = Prado::createComponent($this->GetResponse()->getHtmlWriterType(), $multiwriter); $stack=$this->getPage()->getCachingStack(); $stack->push($this); parent::render($htmlWriter); $stack->pop(); - $content=$htmlWriter->flush(); + $content=$textwriter->flush(); $data=array($content,$this->_state,$this->_actions,time()); $this->_cache->set($this->getCacheKey(),$data,$this->getDuration(),$this->getCacheDependency()); - $writer->write($content); } else parent::render($writer); @@ -582,3 +583,28 @@ class TOutputCacheCalculateKeyEventParameter extends TEventParameter } } + +class TOutputCacheTextWriterMulti extends TTextWriter +{ + protected $_writers; + + public function __construct(Array $writers) + { + //parent::__construct(); + $this->_writers = $writers; + } + + public function write($s) + { + foreach($this->_writers as $writer) + $writer->write($s); + } + + public function flush() + { + foreach($this->_writers as $writer) + $s = $writer->flush(); + return $s; + } +} + -- cgit v1.2.3