我正在尝试设置会话变量,因此每个会话只会出现一次弹出框。
为此,我创建了一个模块,当有人关闭弹出窗口时,通过AJAX调用该模块。模块的控制器设置会话变量。控制器如下所示:
class Company_Popup_IndexController extends Mage_Core_Controller_Front_Action {
public function indexAction() {
Mage::getSingleton('core/session')->setNewsletterPopup('yes');
}
}
超级简单。
然后,在块I中检查是否设置了会话变量(或者用户是否已登录):
class Company_Popup_Block_Popup extends Mage_Core_Block_Template
{
public function displayPopup(){
if(!$this->helper('customer')->isLoggedIn() && Mage::getSingleton('core/session')->getNewsletterPopup() == null){
return true;
}
else{
return false;
}
}
public function getSessionData(){
return Mage::getSingleton('core/session');
}
}
模板文件然后调用displayPopup方法,并显示或不显示新闻稿弹出窗口。
这一切都完美有效......直到我打开Cache,此时会话变量未设置或至少在块/模板文件中无法访问。
我在这里错过了什么?
答案 0 :(得分:1)
我想这个块正在被缓存,这意味着不会访问更新的会话变量,而是返回已缓存的原始调用。
您应该尝试在块内禁用缓存。
尝试将其添加到您的块中:
public function getCacheLifetime() { return null; }
这将禁用块上的缓存,并允许正确调用它。