2011-05-15 63 views
2

我试图解决的问题几乎与此相同:smarty cache and login states,但我想知道是否可以通过特定方式解决此问题。登录时禁用smarty缓存

我想要做的就是简单地禁用所有Smarty的缓存,如果一个用户登录,例如:

$smarty->cache_lifetime = 300; 
$smarty->caching = ($user->is_logged_in) ? false : 2; 
$my_cache_id = $_GET['article_id']; 
if($user->is_logged_in || !$smarty->is_cached('index.tpl',$my_cache_id)) { 
    //Get page data 
} 
$smarty->display('index.tpl', $my_cache_id); 

诚然,这将有尽可能多的效果定义动态块,但它会更容易我的很多流量没有登录。

我很积极,这将出现在前端,因为我需要它,真正的问题是,当我禁用它时是否会缓存任何内容。但我当然会对这样做的任何其他潜在问题感兴趣。

例如:

  • 用户1(未登录) - 执行页,并创建缓存
  • 用户2(登录) - 执行PAGE-缓存被禁用
  • 用户3(未登录in) - 这会从缓存中加载吗?
+0

我已经测试过这种情况,出现登录和退出 - 看起来缓存挂起,只是在关闭时忽略。我希望有人在这里有一些输入。 – therealsix 2011-05-15 17:46:29

+0

请澄清你的问题。我不确定你想达到什么目的。至少,行$ template-> caching = ...应该读为$ smarty-> caching = .. – SteAp 2011-05-15 22:41:51

+0

@ stefan-pantke - 哎呀...只是示例代码和我的代码之间的不一致 - 我使用$ template作为聪明的对象名称 – therealsix 2011-05-16 03:56:15

回答

0

没有使用Smarty的几年,但这里是我拿的,除非你的登录和匿名/注销用户有完全不同的看法,我会分解出登录的观点,即改变在动力集团,根据manual reccomendations

有一个pluggin to control the cache,但相当多的车,我不推荐它。

此外,许多编译和缓存混淆,如果你想100%缓存,$force_compile directive可以做你想做的,但不推荐用于生产站点,因为它确实增加了性能打击。

man page也可以帮助你做你想要的。

祝你好运的朋友! :o)