Smarty Manual
Prev | Chapter 14. Caching | Next

# Multiple Caches Per Page

You can have multiple cache files for a single call to `display()` or `fetch()`. Let's say that a call to `display('index.tpl')` may have several different output contents depending on some condition, and you want separate caches for each one. You can do this by passing a `$cache_id` as the second parameter to the function call.

Example 14-6. Passing a $cache_id to display()
`<?php require('Smarty.class.php'); $smarty = new Smarty; $smarty->caching = 1; $my_cache_id = $_GET['article_id']; $smarty->display('index.tpl', $my_cache_id); ?>`

Above, we are passing the variable `$my_cache_id` to `display()` as the `$cache_id`. For each unique value of `$my_cache_id`, a separate cache will be generated for `index.tpl`. In this example, `article_id` was passed in the URL and is used as the `$cache_id`.

> Technical Note: Be very cautious when passing values from a client (web browser) into Smarty or any PHP application. Although the above example of using the article_id from the URL looks handy, it could have bad consequences. The `$cache_id` is used to create a directory on the file system, so if the user decided to pass an extremely large value for article_id, or write a script that sends random article_id's at a rapid pace, this could possibly cause problems at the server level. Be sure to sanitize any data passed in before using it. In this instance, maybe you know the article_id has a length of ten characters and is made up of alpha-numerics only, and must be a valid article_id in the database. Check for this!

Be sure to pass the same `$cache_id` as the second parameter to `is_cached()` and `clear_cache()`.

Example 14-7. Passing a cache_id to is_cached()
`<?php require('Smarty.class.php'); $smarty = new Smarty; $smarty->caching = 1; $my_cache_id = $_GET['article_id']; if(!$smarty->is_cached('index.tpl',$my_cache_id)) { // No cache available, do variable assignments here. $contents = get_database_contents(); $smarty->assign($contents); } $smarty->display('index.tpl',$my_cache_id); ?>`

You can clear all caches for a particular `$cache_id` by passing `NULL` as the first parameter to `clear_cache()`.

Example 14-8. Clearing all caches for a particular $cache_id
`<?php require('Smarty.class.php'); $smarty = new Smarty; $smarty->caching = 1; // clear all caches with "sports" as the $cache_id $smarty->clear_cache(null,'sports'); $smarty->display('index.tpl','sports'); ?>`

In this manner, you can "group" your caches together by giving them the same `$cache_id`.

Prev | Home | Next
Caching | Up | Cache Groups