免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2184 | 回复: 3
打印 上一主题 下一主题

请教smarty的缓存控制的问题(以解决) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-20 11:45 |只看该作者 |倒序浏览
是这样的,我的项目使用smarty,这是第一次用smarty

由于数据量比较大,mysql检索的时间很长,所以我使用了smarty的缓存(单服务器所以没有考虑使用memcache)

速度是得到极大提升了
但是有个问题,在页面开头的部分有判断用户登录状态并根据用户登录状态显示不同欢迎信息或者登录框的一块区域。
如果一旦对整个模板进行缓存,那么用户登陆后看到得仍然是登陆框

但又不能把用户登陆状态的数据加入到生成缓存的cache_id中去。这样的话生成大量文件不说缓存的意义已经降低到可有可无的样子

查看smarty手册上面说可以使用smarty_block_dynamic注册一个动态块,让这里面的东西不被缓存

是楼下这么写的
  1. require('Smarty.class.php');
  2. $smarty = new Smarty;
  3. $smarty->caching = true;

  4. function smarty_block_dynamic($param, $content, &$smarty) {
  5.     return $content;
  6. }
  7. $smarty->register_block('dynamic', 'smarty_block_dynamic', false);

  8. $smarty->display('index.tpl');


  9. index.tpl:

  10. Page created: {"0"|date_format:"%D %H:%M:%S"}

  11. {dynamic}

  12. Now is: {"0"|date_format:"%D %H:%M:%S"}

  13. ... do other stuff ...

  14. {/dynamic}
复制代码

我也这么干的,只是index.tpl里面是这样
  1. {dynamic}
  2. {if $smarty.session.uid ne false}
  3. hello {*$smarty.session.uname*}
  4. {else}
  5. {*显示登录框及登陆按钮之类的*}
  6. {/if}
  7. {/dynamic}
复制代码


但我测试完全没有效果啊,登陆之后登陆框依然是登陆框的说
我在登陆与否的判断上没有问题,没开缓存的时候是正常的

请问问题到底出在哪里?应该如何解决呢?

哦。由于登陆信息显示在web的头部,最早想到的办法是从tpl的从开始到登陆信息结束单拿出来存成login.tpl
不对login.tpl进行缓存
然后用$smarty->display('login.tpl');$smarty->display('body.tpl');这样的方法来解决
虽然相信这样可以解决这个问题,但是一分的话就会破坏整个html结构的完整性。所以不想采用这种方案

感觉使用dynamic还是王道的做法,可惜就是没搞定。请大家指导

[ 本帖最后由 艾斯尼勒 于 2009-4-20 17:29 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-04-20 12:54 |只看该作者
把头但拿出来啊 别的页面include就行了 用session判断就行了
include一个session认证文件,把用户登陆的有关信息 assign到模板上然后用
{if $oSmarty.session.username}
已登陆信息
{else}
登录框

论坛徽章:
0
3 [报告]
发表于 2009-04-20 13:11 |只看该作者
厄。我是那块单拿出来的
问题是在缓存上啦

论坛徽章:
0
4 [报告]
发表于 2009-04-20 17:08 |只看该作者
问题解决,鼓捣来鼓捣去,原来是编译文件的问题,清掉就好了
不过那个cache_dir 的777权限缓存文件存在,但is_cached仍然有时候返回false问题没找到原因

发现基本上winscp上传的cache_dir又设定权限就不行
ssh连上去手动mkdir的cache_dir再在ssh上设定权限就可以
很奇怪的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP