2012-10-10 13 views
2

我在嘗試設置會話變量,因此每個會話僅出現一次彈出框。在打開緩存的情況下在Magento中設置會話變量

爲此,我創建了一個模塊,當有人關閉彈出窗口時,通過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方法,要麼顯示通訊彈出或不。

這一切都很完美......直到我打開緩存時,會話變量沒有被設置,或者至少在塊/模板文件中無法訪問。

我在這裏錯過了什麼?

+0

你在哪裏渲染你的區塊,例如它是在footer.phtml? – Theodores

+0

您正在運行CE還是EE版? –

+0

它可能會更簡單,如果你只是使用javascript和餅乾女巫沒有緩存。你只能爲當前會話設置一個cookie ... –

回答

1

我想塊被緩存,這意味着更新的會話變量不被訪問,而是返回已被緩存的原始調用。

您應該嘗試並禁用塊內的緩存。

嘗試添加該到你的塊:

public function getCacheLifetime() { return null; } 

這將禁用塊上的高速緩存,並應允許它被正確調用。

+1

+1以獲得更好的信息,但我不認爲這是事實。整個塊代碼都在那裏,並且沒有顯式的緩存集,這意味着該塊不會被緩存爲HTML輸出。更可能的是整個頁面緩存跳過正在執行的控制器操作。 (但很難說沒有更多的信息從原來的海報) –

+0

嗨@Andrew,我剛剛試過你的建議,它不工作,我害怕。正如Alan所說,我沒有在任何地方設置任何顯式緩存。 – hammygoonan

相關問題