[已解决]如何使用片段缓存呢

我在视图文件中使用如下代码:

<?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里:

今天又试了试片断缓存,这回好用了,不知道为什么。

可能是自己配置环境时有问题。