2

ポップアップ ボックスがセッションごとに 1 回だけ表示されるように、セッション変数を設定しようとしています。

これを行うために、誰かがポップアップを閉じたときに 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 に答える