web-dev-qa-db-ja.com

ブロックのコンテンツを動的に/ AJAX経由でロードしますか?

ページにカスタムブロックを設定する必要があります(サイト全体になる)。2つの状態があります。1つはCookieが存在し、特定の値がある場合と、もう1つは、Cookieが存在しないか、値が古い場合です。ログイン状態のように考えますが、Drupalによる認証はありません。

これをブロックbuild()メソッドで行う適切な方法は何ですか?レンダー配列を構築するロジックが組み込まれたレイジーローダーを実装しますか?これらのユーザーに固有になるように、このCookieとその値に基づいてキャッシュコンテキストも追加しますか?

2
Kevin

リクエストからcookieを取得できます EventSubscriberで検証用のcookieが見つかりません を参照してください。コンテキストを設定し、コード例のように強制終了スイッチをトリガーすると、機能するはずです。しかし、これはパフォーマンスには良くありません。したがって、空のブロックコンテナーを配信し、jsライブラリをブロックにアタッチし、クライアント側でCookie値を取得してから、ブロックのコンテンツを取得するためのajaxリクエストを開始します。

ブロックのクライアント側を遅延ロードする方法の例として、モジュールのコード Ajax Block を参照してください: https://git.drupalcode.org/project/block_ajax

2
4k4