フックのために、コールバックをhook_menu()実装に記述しましたが、キャッシュが原因で、意図したとおりに機能しません。コールバックは、Cookieに応じてテキストを返すだけです。そんな感じ:
function _show_logoutpage(){
if($_COOKIE['foo'] == true) {
return 'foo';
}
else {
return 'bar';
}
}
ユーザーがログアウトした後にコードが呼び出されるため、ユーザーは匿名であると言えます。問題は、出力がキャッシュされるため(最後のメニューキャッシュがクリアされたため)、ロジックが機能しなくなります。これを簡単な方法で修正する方法はありますか?
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';
}
}
$GLOBALS['conf']['cache'] = FALSE;
モジュール CacheExclude も参照してください。以下に詳細を示します。
このモジュールは、特定のページをキャッシュから除外する簡単な方法を提供します。場合によっては、動的なコンテンツ、ランダムなコンテンツ、または回転するコンテンツを持つ1つまたは2つのページを除いて、匿名ユーザーのためにすべてのページをキャッシュする必要があります。それらのページがキャッシュされている場合、動的部分は動的ではなくなります。このモジュールを使用すると、管理者は特定のパスをキャッシュから選択的に除外して、動的コンテンツが実際に動的になるようにすることができます。
メニュー項目がキャッシュされることが問題だとは思わない。そのメニューパスのページ結果が匿名ユーザー用にキャッシュされるのでしょうか(最初にページにアクセスしたユーザーを除くすべてのユーザーの$ cookieステータスは無視されます)?
Drupalのどのバージョンを使用していますか?ページキャッシュ設定は何ですか?