2

我正在尝试设置会话变量,以便每个会话仅出现一次弹出框。

为此,我创建了一个在有​​人关闭弹出窗口时通过 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 方法并显示或不显示时事通讯弹出窗口。

这一切都很完美......直到我打开缓存,此时会话变量没有设置或至少在块/模板文件中不可访问。

我在这里错过了什么?

4

1 回答 1

1

我想这个块正在被缓存,这意味着更新的会话变量没有被访问,而是返回了被缓存的原始调用。

您应该尝试禁用块内的缓存。

尝试将其添加到您的块中:

 public function getCacheLifetime() { return null; } 

这将禁用块上的缓存,并应允许正确调用它。

于 2012-10-10T16:27:07.980 回答