Smarty 图标

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

Smarty Template Engine Smarty Template Engine

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

使用 Smarty 的网站

广告

每页多个缓存

在一次对display()fetch()的调用中,你可以为单个调用使用多个缓存文件。比如,对display('index.tpl')的调用可能根据某些条件有若干不同的输出内容,而你希望对每一个输出内容使用单独的缓存。你可以将$cache_id作为第二个参数传给函数调用来做到这一点。

示例 15.6 向 display() 传递 $cache_id

<?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。务必检查这一点!

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

示例 15.7 向 isCached() 传递一个 cache_id

<?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);
?>

     

你可以通过向clearCache()传递NULL作为第一个参数,清除一个特定$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 来将缓存 分组