web-dev-qa-db-ja.com

Drupalキャッシュすると、Cookieの読み取りができなくなります

私の制作サイトの1つで、jQueryスタイルシートスイッチャーを作成しました。選択が行われるとCookieをドロップし、phpを使用して、スタイルをオーバーライドするページロードで対応するスタイルシートを選択します。パフォーマンスキャッシュモードを有効にするまでは、すべてがすばらしいです。これにより、各ページロードでCookieが無視されます。明らかにこれは望ましい効果ではなく、なぜこれが発生しているのかがわかります。つまり、ページがキャッシュされ、「動的」に変化するスタイルシートと見なされるもののロードに関して、真に動的ではなくなっています。スタイルシートは変更できますが、ページに戻ると初期スタイルが適用されます。参考までに、phpを各ページテンプレート(page-front.tpl.phpおよびpage.tpl.php)にコーディングしました。javascriptは、scripts.jsにあります。 PHPは基本的に、if elseステートメントのほんの一部です。

大量のトラフィックがあるため、サイトでキャッシュを有効にする必要がありますが、このスタイルスイッチャー機能を保持したいのですが。これのキャッシングルールを例外にする方法はありますか、それともスイッチャーを無効にする必要がありますか?それをモジュールに詰め込むことは役に立ちますか?

前もって感謝します :)

2
Storsey

同じページの2つのバージョンを作成したいので、キャッシュでこれを行うのは難しいと思います。

私はこれを試していませんが、style.cssを実際のcssファイルではなく、Cookieに基づいてスタイルを返すdrupalコールバックにすることができるはずです。 IEのスタイルと同じように、「スタイルシート」を含める必要があります。これをキャッシュすることはできませんが、本当にパフォーマンスが必要な場合は、phpファイルで行うことができ、drupalブートストラップをスキップできます。

別のオプションは、Cookieに基づいて、js自体にスタイルを実行させることです。

これらのオプションはどれも理想的ではありませんが、機能するはずです。

2
googletorp

Cookieを使用して、memcacheを使用してcache_pageバリアントを選択する: http://drupal.org/node/942914 。これをGeoIPターゲティングに使用します。

ユーザーがモバイルデバイスを使用している場合にCookieを使用してモバイルテーマを選択する: http://drupal.org/node/361832#comment-4110568 。これを使用しないでください。ローカルの SeaDUG ミーティングの1つでいくつかの助けを与えました。

2
mikeytown2

ページの1つのバージョンのみを作成することは可能ですか?すべてのページにすべてのスタイルを含め(おそらく理想的ではないが、巨大でない限り世界の終わりではない)、JavaScriptを使用して、たとえばCookieの値に応じて本体クラスを追加しますか?

あるいは、スタイルシートが.cssファイルではなくコールバックであるというgoogletorpのアイデアが好きです。

2
Chris Cohen