smarty缓存:smarty缓存Cache控制, php smarty 安装 、配置、使用 及缓存cache的配置使用 。

jackxiang 2010-3-17 14:40 | |
背景:smarty自己也能实现cache,这块于nginx的cache模块不一样,它能实现一个页面某些地方(块)用上cache,有些用不上,实现灵活控制。
一)
框架里一般写成配置文件:
./libraries/smarty/Smarty.class.php
    /**
     * This enables template caching.
     * <ul>
     *  <li>0 = no caching</li>
     *  <li>1 = use class cache_lifetime value</li>
     *  <li>2 = use cache_lifetime in cache file</li>
     * </ul>
     * @var integer
     */
    var $caching         =  0;
    var $cache_dir       =  'cache';
    var $cache_lifetime  =  3600;
二)配置文件,只配置路径,而不配置caching 值,在初始化时决定:
[codes=php]
<?php
defined('SYS_PATH') OR die('No direct access allowed.');

return array (
    'templates_ext'         => 'html',
    'template_path'         => APP_PATH. 'views/',
    'cache_path'            => DATA_PATH. 'cache/smarty_cache/',
    'compile_path'          => DATA_PATH. 'cache/smarty_compile/',
    'configs_path'          => DATA_PATH. 'config/',
    'left_delimiter'        => '<{',
    'right_delimiter'       => '}>',
);

[/codes]
三)smarty 默认是不cache的
./libraries/smarty/Smarty.class.php:  
[codes=php]
var $caching         =  0;
[/codes]


简单实例配置smarty摘录:
php smarty 安装 、配置、使用 及缓存cache的配置使用 :
cache 使用:
    cache配置:
    $smarty->cache_dir = "/caches/";  //缓存目录  
    $smarty->caching = true;  //开启缓存,为flase的时侯缓存无效  
    $smarty->cache_lifetime = 60;  //缓存时间  
    cache清除和使用:
$smarty->display('cache.tpl', cache_id); //创建带ID的缓存
cache.tpl //模板文件
$smarty->clear_all_cache(); //清除所有缓存
$smarty->clear_cache('index.htm'); //清除index.tpl的缓存
$smarty->clear_cache('index.htm',cache_id); //清除指定id的缓存
marty 安装配置 说明:
下载smarty解压 将libs目录   copy到项目主目录下,至少建立如下如下文件夹:templates  templates_c  configs  cache
index.php
<?php
     include("libs/Smarty.class.php");
  $smarty = new Smarty;
  $smarty->template_dir = './templates/';
  $smarty->compile_dir  = './templates_c/';
  $smarty->config_dir   = './configs/';
  $smarty->cache_dir    = './cache/';
     $smarty->caching      = true;
     $smarty->cache_lifetime = 60;
  $smarty->left_delimiter = "<{";
  $smarty->right_delimiter = "}>";
  $smarty->assign("title", "垃圾");
  $smarty->assign("content","测试用的网页内容00");
  $smarty->display("index.tpl",cache_id);
  ?>
index.tpl模板文件
<html>
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  <title><{$title}></title>
  </head>
  <body>
  <{$content}>
  </body>
  </html>

摘自:http://blog.csdn.net/flyintheworldzdz/article/details/5557997
____________________________smarty缓存Cache控制___________________________________
  smarty提供了强大缓存Cache功能但有时我们并不希望整篇文档都被缓存Cache而是有选择缓存
Cache某部分内容或某部分内容不被缓存Cache例如你在页面上端使用个带有广告条位置模板广告条可以包含
任何HTML、图象、FLASH等混合信息. 因此这里不能使用个静态链接同时我们也不希望该广告条被缓存Cache.
这就需要在 insert 指定同时需要个取广告条内容信息smarty也提供了这种缓存Cache控制能力
  我们可以使用{insert}使模板部分不被缓存Cache
  可以使用$smarty->register_function($params,&$smarty)阻止插件从缓存Cache中输出
  还可以使用$smarty->register_block($params,&$smarty)使整篇页面中某块不被缓存Cache
  下面我们真对个简单需求分别介绍说明这 3种控制缓存Cache输出思路方法
  需求:被缓存Cache文档中当前时间不被缓存Cache随每次刷新而变化
  1、使用insert使模板部分不被缓存Cache
  index.tpl:
  <div>{insert name="get_current_time"}</div>
  index.php
function insert_get_current_time{
     date("Y-m-d H:m:s");
}
$smarty= smarty;
$smarty->caching = true;
(!$smarty->is_cached){
    .......
}
$smarty->display('index.tpl');
  注解:
  定义个名格式为:inser_name(.gif' /> $params, object &$smarty),
  参数可选如果在模板insert思路方法中需要加入其他属性就会作为传递给用户定义
  如:{insert name='get_current_time' local='zh'}
  在get_current_time中我们就可以通过$params['local']来获得属性值
  如果在get_current_time中需要用到当前smarty对象思路方法或属性就可以通过第 2个参数获得
  这时你会发现index.tpl已被缓存Cache但当前时间却随每次刷新在不断变化
  2、使用register_function阻止插件从缓存Cache中输出
  index.tpl:
<div>{current_time}{/div}
index.php:
function smarty_function_current_time($params, &$smarty){
     date("Y-m-d H:m:s");
}
$smarty= smarty;
$smarty->caching = true;
$smarty->register_function('current_time','smarty_function_current_time',false);
(!$smarty->is_cached){
    .......
}
$smarty->display('index.tpl');
  注解:
  定义个名格式为:smarty_type_name($params, &$smarty)
  type为function
  name为用户自定义标签名称在这里是{current_time}
  两个参数是必须即使在中没有使用也要写上两个参数功能同上
  3、使用register_block使整篇页面中某块不被缓存Cache
  index.tpl:
<div align='center'>
Page created: {"0"|date_format:"%D %H:%M:%S"}
{dynamic}
Now is: {"0"|date_format:"%D %H:%M:%S"}
... do other stuff ...
{/dynamic}
</div>
index.php:
function smarty_block_dynamic($param, $content, &$smarty) {
$content;
}
$smarty = Smarty;
$smarty->caching = true;
$smarty->register_block('dynamic', 'smarty_block_dynamic', false);
(!$smarty->is_cached){
    .......
}
$smarty->display('index.tpl');
  注解:
  定义个名格式为:smarty_type_name($params, &$smarty)
  type为block
  name为用户自定义标签名称,在这里是{dynamic}
  两个参数是必须即使在中没有使用也要写上两个参数功能同上
  4、整理总结
  (1)对缓存Cache控制能力:
  使用register_function和register_block能够方便控制插件输出缓冲能力可以通过第 3个参数控制是否缓存
Cache默认是缓存Cache需要我们显示设置为false正如我们试验中所做那样“$smarty-
>register_function('current_time','smarty_function_current_time',false);”
  但insert默认是不缓存Cache并且这个属性不能修改从这个意义上讲insert对缓存Cache控制能力似乎不如
register_function和register_block强
  (2)使用方便性:
  但是insert使用非常方便不用显示注册只要在当前请求过程中包含这个smarty就会自动在当前请求过程中
查找指定
  当然register_function也可以做到不在运行时显示注册但是那样做效果跟其他模版样统统被缓存Cache并
且不能控制
  如果你使用在运行时显示register_function注册自定义那么定要在is_cached思路方法前完成注册工作
  否则在is_cached这步缓存Cache文档将找不到注册而导致smarty

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/2831/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2014-9-30 15:10
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]