- 论坛徽章:
- 0
|
是这样的,我的项目使用smarty,这是第一次用smarty
由于数据量比较大,mysql检索的时间很长,所以我使用了smarty的缓存(单服务器所以没有考虑使用memcache)
速度是得到极大提升了
但是有个问题,在页面开头的部分有判断用户登录状态并根据用户登录状态显示不同欢迎信息或者登录框的一块区域。
如果一旦对整个模板进行缓存,那么用户登陆后看到得仍然是登陆框
但又不能把用户登陆状态的数据加入到生成缓存的cache_id中去。这样的话生成大量文件不说缓存的意义已经降低到可有可无的样子
查看smarty手册上面说可以使用smarty_block_dynamic注册一个动态块,让这里面的东西不被缓存
是楼下这么写的
- require('Smarty.class.php');
- $smarty = new Smarty;
- $smarty->caching = true;
- function smarty_block_dynamic($param, $content, &$smarty) {
- return $content;
- }
- $smarty->register_block('dynamic', 'smarty_block_dynamic', false);
- $smarty->display('index.tpl');
- index.tpl:
- Page created: {"0"|date_format:"%D %H:%M:%S"}
- {dynamic}
- Now is: {"0"|date_format:"%D %H:%M:%S"}
- ... do other stuff ...
- {/dynamic}
复制代码
我也这么干的,只是index.tpl里面是这样- {dynamic}
- {if $smarty.session.uid ne false}
- hello {*$smarty.session.uname*}
- {else}
- {*显示登录框及登陆按钮之类的*}
- {/if}
- {/dynamic}
复制代码
但我测试完全没有效果啊,登陆之后登陆框依然是登陆框的说
我在登陆与否的判断上没有问题,没开缓存的时候是正常的
请问问题到底出在哪里?应该如何解决呢?
哦。由于登陆信息显示在web的头部,最早想到的办法是从tpl的从开始到登陆信息结束单拿出来存成login.tpl
不对login.tpl进行缓存
然后用$smarty->display('login.tpl');$smarty->display('body.tpl');这样的方法来解决
虽然相信这样可以解决这个问题,但是一分的话就会破坏整个html结构的完整性。所以不想采用这种方案
感觉使用dynamic还是王道的做法,可惜就是没搞定。请大家指导
[ 本帖最后由 艾斯尼勒 于 2009-4-20 17:29 编辑 ] |
|