web-dev-qa-db-ja.com

Drupalビュー3 / CiviCRM統合-ブロックの更新はユーザー認証に依存します

すべて、

CiviCRMのインストールでは、個人の連絡先と組織の連絡先の両方をサポートしています。 Drupalサイトの場合、組織の連絡先に関する情報を公開するビューに基づくブロックがあります。このビューは、それぞれに3つの異なる組織を公開するために、グローバル:ランダムソート基準で構成されています。ページ訪問。

(認証されたユーザーまたは管理者として)サイトにログインすると、ブロックは正しく機能します。サイトにログインしていないと、ブロックが更新されません。明確にするために:ログインすると、同じページをリロードすると、3つの異なる組織の連絡先が表示されます。ログインしていない場合は、毎回同じ3つの組織の連絡先が表示されます。

この問題はキャッシュに関連しているようです。 Drupalキャッシュをクリアすると、ログインしていないユーザーの組織の連絡先が変更されました(ただし、上記と同じままです)。

この問題の修正を提案していただけませんか。ありがとうございました!

1
GRoston

これを回避する方法があるかどうかはわかりません。 Drupalは、ほとんどのページと同様に、ビューの出力を匿名ユーザーにキャッシュします。Drupalは、認証されたユーザーのコンテンツをキャッシュすることはめったにありません。さらに、匿名ユーザーのDrupalサイトのパフォーマンスが大幅に向上するため、ホストはVarnishなどのリバースキャッシュを使用している可能性があります。

回避策は、コンテンツのキャッシュ時間を短縮することです。まず、特定のビューのキャッシュ設定を変更してみてください。そうでない場合は、/ admin/config/development/performanceのグローバル設定を試してください。

ただし、表示している連絡先のリストが一種の「ランダムに機能するメンバー」タイプのブロックであると仮定すると、キャッシュが15分または30分ごとに期限切れになる場合でも、本当に必要な場合を除いて、通常はそのタイプの要件には十分です。トラフィックの多いサイトであり、より速く回転する必要があります。

veryトラフィックの多いサイトがある場合は、キャッシュが強制終了されないように、ブロックをAjaxで動的にロードします(そして、有効期限が短いmemcachedなどのより効率的なキャッシュにそのブロックをキャッシュしますおそらく5分)。

2
bgm

この問題はキャッシュに関連しているようです。

あなたは完全に正しいです、そうです。それはブロックキャッシュかもしれませんが、おそらくそれはページキャッシュまたはブーストですらあります。 Boost、Varnishなどで無視できる短いキャッシュやDRUPAL_NO_CACHEのようなさまざまな回避策の代わりに、私は別の方法を好みます。

  • ランダムであるはずのデータ用の空の場所を作成します。これは、ページがキャッシュされる可能性があることを意味します。問題はありません。

  • AJAXを使用して、ランダムなデータを入力します。ページはすでにレンダリングされており、ユーザーには遅延は見られません。データの最初の部分を表示するために、いくつかのニース効果を使用します。

  • 追加のボーナス:タイマーを使用すると、ユーザーがページをリロードしていなくてもデータをシャッフルできます。

1
Mołot
0
Joe Murray