web-dev-qa-db-ja.com

Drupal 8:スケジュールに従って匿名ユーザーのブロックのキャッシュを無効にするにはどうすればよいですか?

私の組織のサイトのページの各ページの上部には、Viewsブロックと Office Hours モジュールを使用して、現在の営業時間と現在の「現在開いている」/「現在閉じている」ステータスがあります。

ログインしている水曜日のこの夜の時間に、明日の時間が反映されており、組織が現在閉鎖されていることが正しくわかります。

enter image description here

ただし、ログアウトすると、当日の時間(現在は終了)と「NOW OPEN」が表示されます。クローズ後6時間で、パフォーマンス設定の5分のページキャッシュ時間は、匿名のページビューでは考慮されないようです。

enter image description here

おそらくスケジュール通りに、匿名ユーザーに対して匿名キャッシュのクリア(過剰)を強制したり、ブロックを無効にしたりするにはどうすればよいですか?組み込みのページキャッシュモジュールは、匿名ユーザーの完全にレンダリングされたページをキャッシュしている可能性がありますが、動的ページキャッシュモジュールは、ログインしているユーザーが使用できるようにします。ページキャッシュは、パフォーマンス設定ページで設定されたページキャッシュの最大経過時間を尊重するべきではありませんか?すべてのページの上部に現在の時間を表示するほとんどの人々は匿名ユーザーです。

ここでは、手動でキャッシュをクリアして、ステータスを適切に更新します(理想的ではありません)。

[〜#〜]更新[〜#〜]

ウェブサイトは主に匿名ユーザーに提供されていますが、私は これは役立つアドバイス を見つけました:

「パーソナライズされたコンテンツを匿名ユーザーに提供するWebサイト(動的、セッションごと、たとえばショッピングカート)では、内部ページキャッシュモジュールを無効にする必要があります。このモジュールは、すべての匿名ユーザーのページが同一であることを前提としています。これらのWebサイトは、ただし、動的ページキャッシュモジュール、またはJavaScript + AJAXを使用して個別設定を行うことができます。」

これにより、差し迫った問題が解決されたようです。 JavaScriptを探る+ AJAX=将来。内部ページキャッシュを無効にした後、カスタムのレイジービルダーブロック+ BigPipeは、ページが読み込まれるたびに即座に変更する必要があるページに十分な可能性があります。

4

これは、Drupal 8の遅延ビルダーを使用するのに最適な場所のようです。

http://tech.dichtlog.nl/php/2015/08/03/lazy-builder-callback.html

http://www.qed42.com/blog/lazy-builders-drupal8

これにより、ページの残りの部分をキャッシュできますが、遅延ビルダーサービスは、ビジネスが現在開いているか閉じているかを返します。

4
oknate

オフィスアワーの問題キューの一番上にあるのがこの問題です。

office_hoursモジュールのD8バージョンのJavaScriptを修正

問題は、匿名ユーザーの場合、JavaScriptが機能する必要があるため、この問題を解決する必要があることです。

独自のモジュールを構築する場合は、@ oknateのアドバイスに従い、カスタムブロックプラグインでレイジービルダーを使用して、 BigPipe をインストールし、匿名ユーザー用のJavaScript部分を取得します。

4
4k4

Hook_block_view_BASE_BLOCK_ID_alterを実装してみましたか?

キャッシュから除外するコードは次のとおりです。

function hook_block_view_BASE_BLOCK_ID_alter(array&$ build、\ Drupal\Core\Block\BlockPluginInterface $ block){$ build ['#cache'] ['max-age'] = 0; }

迅速かつダーティーな解決策は、 Cleaner module を使用して、cronの実行時にキャッシュを強制的にクリアすることです。 cronの実行を開始/終了時に実行するようにスケジュールできます。 Cleanerはキャッシュ全体をクリアし、パフォーマンスが低下するため、理想的なソリューションではありません。しかし、上記のレイジービルダー/ビッグパイプソリューションを開発する時間があるまでは、これは簡単な修正です。

1
B. Schroeder

cache max-age "をブロック定義に追加します。 Cache API で提供される短い説明に従ってmax-ageのページ:

時間に依存するキャッシング、つまり時間依存

たとえば、ブロックチェックでキャッシュを使用/設定する方法の例 Drupal 8ブロックキャッシュ

お役に立てれば。

0
Yogesh