0 follower

Dynamic Content

When using fragment caching or page caching, we often encounter the situation where the whole portion of the output is relatively static except at one or several places. For example, a help page may display static help information with the name of the user currently logged in displayed at the top.

To solve this issue, we can variate the cache content according to the username, but this would be a big waste of our precious cache space since most content are the same except the username. We can also divide the page into several fragments and cache them individually, but this complicates our view and makes our code very complex. A better approach is to use the dynamic content feature provided by CController.

A dynamic content means a fragment of output that should not be cached even if it is enclosed within a fragment cache. To make the content dynamic all the time, it has to be generated every time even when the enclosing content is being served from cache. For this reason, we require that dynamic content be generated by some method or function.

We call CController::renderDynamic() to insert dynamic content at the desired place.

...other HTML content...
<?php if($this->beginCache($id)) { ?>
...fragment content to be cached...
    <?php $this->renderDynamic($callback); ?>
...fragment content to be cached...
<?php $this->endCache(); } ?>
...other HTML content...

In the above, $callback refers to a valid PHP callback. It can be a string referring to the name of a method in the current controller class or a global function. It can also be an array referring to a class method. Any additional parameters to renderDynamic() will be passed to the callback. The callback should return the dynamic content instead of displaying it.