web-dev-qa-db-ja.com

hook_menuコールバックをキャッシュしない方法

フックのために、コールバックをhook_menu()実装に記述しましたが、キャッシュが原因で、意図したとおりに機能しません。コールバックは、Cookieに応じてテキストを返すだけです。そんな感じ:

function _show_logoutpage(){
    if($_COOKIE['foo'] == true) {
        return 'foo';
    }
    else {
        return  'bar';
    }
}

ユーザーがログアウトした後にコードが呼び出されるため、ユーザーは匿名であると言えます。問題は、出力がキャッシュされるため(最後のメニューキャッシュがクリアされたため)、ロジックが機能しなくなります。これを簡単な方法で修正する方法はありますか?

6
nonsenz

Returnをechoに変更して終了します。または、ページキャッシュを無効にします。

function _show_logoutpage() {
    if ($_COOKIE['foo'] == TRUE) {
        echo 'foo';
        exit;
    }
    else {
        echo 'bar';
        exit;
    }
}

OR

function _show_logoutpage() {
    global $conf;
    $conf['cache'] = CACHE_DISABLED;
    if ($_COOKIE['foo'] == TRUE) {
        return 'foo';
    }
    else {
        return  'bar';
    }
}
3
mikeytown2

$GLOBALS['conf']['cache'] = FALSE;

モジュール CacheExclude も参照してください。以下に詳細を示します。

このモジュールは、特定のページをキャッシュから除外する簡単な方法を提供します。場合によっては、動的なコンテンツ、ランダムなコンテンツ、または回転するコンテンツを持つ1つまたは2つのページを除いて、匿名ユーザーのためにすべてのページをキャッシュする必要があります。それらのページがキャッシュされている場合、動的部分は動的ではなくなります。このモジュールを使用すると、管理者は特定のパスをキャッシュから選択的に除外して、動的コンテンツが実際に動的になるようにすることができます。

5
user49

メニュー項目がキャッシュされることが問題だとは思わない。そのメニューパスのページ結果が匿名ユーザー用にキャッシュされるのでしょうか(最初にページにアクセスしたユーザーを除くすべてのユーザーの$ cookieステータスは無視されます)?

Drupalのどのバージョンを使用していますか?ページキャッシュ設定は何ですか?

1
Chris