Smarty 图标

您可以根据商标声明使用 Smarty 标识。

Smarty Template Engine Smarty Template Engine

如需赞助、广告、新闻或其他询问,请通过以下方式与我们联系

使用 Smarty 的网站

广告

单页中的多个缓存

您可以在单个调用 display()fetch() 的情况下,使用多个缓存文件。假设调用 display('index.tpl') 可能根据某些条件而有多种不同的输出内容,并且您希望为每种输出内容使用单独的缓存。您可以通过将 $cache_id 作为第二个参数传递到函数调用中来实现这一点。

示例 15.6. 将 $cache_id 传递到 display() 中

<?php
require('Smarty.class.php');
$smarty = new Smarty;

$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);

$my_cache_id = $_GET['article_id'];

$smarty->display('index.tpl', $my_cache_id);
?>

     

在上面,我们将变量 $my_cache_id 作为 $cache_id 传递到 display() 中。对于 $my_cache_id 的每个唯一值,将为 index.tpl 生成一个单独的缓存。在此示例中, article_id 在 URL 中传递,并用作 $cache_id

技术说明

在将值从客户端(网络浏览器)传递到 Smarty 或任何 PHP 应用程序时,务必保持谨慎。尽管上面使用 URL 中的 article_id 的示例看起来很方便,但这可能会造成不良后果。$cache_id 用于在文件系统上创建目录,因此,如果用户决定为 article_id 传递一个极大的值,或编写一个以极快的速度发送随机 article_id 的脚本,这可能会在服务器级别造成问题。确保在使用之前对传入的任何数据进行清除。在此例中,您可能知道 article_id 的长度为十个字符,并且仅仅由字母和数字组成,并且在数据库中必须是一个有效的 article_id,为此请进行检查!

务必将相同的 $cache_id 作为第二个参数传递到 isCached()clearCache() 中。

示例 15.7. 将 cache_id 传递到 isCached() 中

<?php
require('Smarty.class.php');
$smarty = new Smarty;

$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);

$my_cache_id = $_GET['article_id'];

if(!$smarty->isCached('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);
?>

     

您可以通过将 NULL 作为 clearCache() 的第一个参数来清除特定 $cache_id 的所有缓存。

示例 15.8. 清除特定 $cache_id 的所有缓存

<?php
require('Smarty.class.php');
$smarty = new Smarty;

$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);

// clear all caches with "sports" as the $cache_id
$smarty->clearCache(null,'sports');

$smarty->display('index.tpl','sports');
?>

     

这样,您可以通过为它们提供相同的 $cache_id 来将您的缓存分组在一起。