【发布时间】:2012-10-10 14:45:49
【问题描述】:
我正在尝试设置会话变量,以便每个会话仅出现一次弹出框。
为此,我创建了一个在有人关闭弹出窗口时通过 AJAX 调用的模块。模块的控制器设置一个会话变量。控制器如下所示:
class Company_Popup_IndexController extends Mage_Core_Controller_Front_Action {
public function indexAction() {
Mage::getSingleton('core/session')->setNewsletterPopup('yes');
}
}
超级简单。
然后,在块中,我检查会话变量是否已设置(或者用户是否已登录):
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 方法并显示或不显示时事通讯弹出窗口。
这一切都很完美......直到我打开缓存,此时会话变量没有被设置或至少在块/模板文件中不可访问。
我在这里错过了什么?
【问题讨论】:
-
你在哪里渲染你的块,例如它在 footer.phtml 中吗?
-
您运行的是 CE 版还是 EE 版?
-
如果您只使用 javascript 和不缓存 cookie 会更简单。您只能为当前会话设置 cookie...
-
@Goonanism 你需要更具体一点,“打开缓存”在 Magento 中意味着很多不同的东西。您使用的是什么 Magento 版本,您打开了什么“缓存”。如果您不确定后者,您采取了哪些步骤来“打开”缓存?
-
感谢大家的cmets。澄清几点。我正在使用 1.7 CE 并在 footer.phtml 中呈现块。我已经尝试过 javascript cookie,这有点像噩梦。 “打开缓存”是指进入缓存存储管理并启用所有缓存类型。
标签: ajax magento session-variables