我在视图文件中使用如下代码:
<?php if($this->beginCache('testFragmentCache', array('duration'=>3600))) { ?>
<br/>test cache
<?php $this->endCache(); } ?>
我在另一视图或者同一视图下通过什么方式能调用些缓存呢?
我在视图文件中使用如下代码:
<?php if($this->beginCache('testFragmentCache', array('duration'=>3600))) { ?>
<br/>test cache
<?php $this->endCache(); } ?>
我在另一视图或者同一视图下通过什么方式能调用些缓存呢?
要重用一块显示的话,你可以用clip功能:
<?php $this->beginClip('testClip'); ?> test content <?php $this->endClip(); ?>
然后在另一个地方就可以用$this->clips['testClip']获得这块显示内容。
谢谢呀!又学会一种 用法。
但我想知道片断缓存怎么样来用呢,适用的场景是什么呢?
以blog例子为例,Tag Cloud需要花费较多的时间来生成(因为涉及到复杂的SQL)。另一方面,Tag Cloud的内容又不是经常变化的(或者即便显示的不是最新内容也没什么关系)。这种情况下,我们就可以利用片段缓存,把Tag Cloud的代码放在beginCache和endCache之间。
那调用片断缓存时也是用$this->caches['id'];来使用吗?
不用。当cache里的内容有效时,它自动就在当前位置上显示了。
可能我没有描述清楚我想问的,
比如你给我的用clips的建议那个情况,我就想用缓存来实现,我在一个地方用
<?php if($this->beginCache('testFragmentCache', array('duration'=>3600))) { ?>
<br/>test cache
<?php $this->endCache(); } ?>
然后在另外的地方想引用此缓存,需要如何用呢?
如果能象clips那样给我个例子就更好了,
blog的DEMO我还没看呢,我会立即去看的。
我在用命令工具生成的DEMO中进行clips的操作:我是这样来做的:
在视图文件“login.php”中
<?php $this->beginClip('testCache');?>
<br/>test cache
<?php $this->endClip(); ?>
<?php echo $this->clips['testCache'];?>
只有HTML代码正常显示,但下边的$this->clips['testCache']是没有任何输出,
我在另一视图文件“index.php”中再次使用$this->clips['testCache']时,也是无任何输出
然后我用<?php print_r($this->clips);?>,显示结果如下:
CMap Object
(
[_d:private] => Array
(
)
[_r:private] =>
[_e:private] =>
[_m:private] =>
)
clip也没有使用成功,不知道我什么位置用错了呢?
片段缓存和clip的用途是不一样的。前者就像页面缓存一样,只是作用范围是页面的一部分,而后者主要是截取一段内容放到另一个地方显示。
你的第一个例子应该是能正常工作的。注意,beginClip和endClip之间的内容是不显示的(因为被截获了)。你第二个例子可能是因为clip还没被截获。
感谢提醒:beginClip和endClip之间的内容是不显示的(因为被截获了)。
这一点。
我又试了一下,只要是在login.php里面调用 多少次<?php echo $this->clips['testCache'];?>都 可以显示
但换另外的视图文件就不行。
我由此得出clips只适用在当前的文件。
不知这样下结论是否正确呢?请指教!
clip其实很简单,就是截获一段显示保存在clips里。它应该适用多个视图的,只要clip已经截获了。你当然不能在一个request里截获,然后在另一个request里显示。这里说的都是在同一个request里。
明白了,谢谢强哥!
再次问一下:
片断缓存也不能在多个视图中共享吗?
希望强哥给个实例呀。
谢谢!
<?php if ($this->beginCache('cache_1', array('duration'=>3600))) {?>
我完缓存1235
<?php $this->endCache(); }?>
我在视图中用上边的代码,但我一改begin与end之间的内容,页面显示也随着改变,是不是缓存没有保存3600这么长时间呢?
你有没有在APP CONFIG里启用cache?
已经开启了缓存
'components'=>array(
'cache'=>array(
'class'=>'system.caching.CMemCache',
'servers'=>array(
array('host'=>'127.0.0.1', 'port'=>11211, 'weight'=>60),
),
),
我没法重现这个问题。。。我用的是CDbCache。
能发一个你用CDbCache的代码吗?我学习学习
yiic webapp的index.php view里用和你一样的代码。
app config里:
今天又试了试片断缓存,这回好用了,不知道为什么。
可能是自己配置环境时有问题。