diff options
Diffstat (limited to 'framework/Web/UI/WebControls/TOutputCache.php')
-rw-r--r-- | framework/Web/UI/WebControls/TOutputCache.php | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/framework/Web/UI/WebControls/TOutputCache.php b/framework/Web/UI/WebControls/TOutputCache.php index 08f60f90..a19965b0 100644 --- a/framework/Web/UI/WebControls/TOutputCache.php +++ b/framework/Web/UI/WebControls/TOutputCache.php @@ -48,10 +48,17 @@ * or is invalidated, while that by the outer cache not, the outer cached
* content will be used.
*
+ * Note, TOutputCache is effective only for non-postback page requests
+ * and when cache module is enabled.
+ *
+ * Do not attempt to address child controls of TOutputCache when the cached
+ * content is to be used. Use {@link getContentCached ContentCached} property
+ * to determine whether the content is cached or not.
+ *
* @author Qiang Xue <qiang.xue@gmail.com>
* @version $Revision: $ $Date: $
* @package System.Web.UI.WebControls
- * @since 3.0
+ * @since 3.1
*/
class TOutputCache extends TControl implements INamingContainer
{
@@ -66,6 +73,7 @@ class TOutputCache extends TControl implements INamingContainer private $_state;
private $_actions=array();
private $_varyByParam='';
+ private $_keyPrefix='';
/**
* Returns a value indicating whether body contents are allowed for this control.
@@ -184,10 +192,8 @@ class TOutputCache extends TControl implements INamingContainer */
protected function loadStateRecursive(&$state,$needViewState=true)
{
- if($this->_dataCached)
- parent::loadStateRecursive($this->_state,$needViewState);
- else
- parent::loadStateRecursive($state,$needViewState);
+ $st=unserialize($state);
+ parent::loadStateRecursive($st,$needViewState);
}
/**
@@ -202,13 +208,13 @@ class TOutputCache extends TControl implements INamingContainer {
if($this->_dataCached)
return $this->_state;
- else if($this->_cacheAvailable)
+ else
{
- $this->_state=parent::saveStateRecursive($needViewState);
+ $st=parent::saveStateRecursive($needViewState);
+ // serialization is needed to avoid undefined classes when loading state
+ $this->_state=serialize($st);
return $this->_state;
}
- else
- return parent::saveStateRecursive($needViewState);
}
/**
@@ -251,10 +257,20 @@ class TOutputCache extends TControl implements INamingContainer $name=trim($name);
$params[$name]=$request->itemAt($name);
}
- return self::CACHE_ID_PREFIX.$this->getUniqueID().serialize($params);
+ return self::CACHE_ID_PREFIX.$this->_keyPrefix.$this->getUniqueID().serialize($params);
}
else
- return self::CACHE_ID_PREFIX.$this->getUniqueID();
+ return self::CACHE_ID_PREFIX.$this->_keyPrefix.$this->getUniqueID();
+ }
+
+ /**
+ * Sets the prefix of the cache key.
+ * This method is used internally by {@link TTemplate}.
+ * @param string key prefix
+ */
+ public function setCacheKeyPrefix($value)
+ {
+ $this->_keyPrefix=$value;
}
/**
|