匿名ユーザーの単一フィールドのキャッシュを無効にする方法はありますか?


7

私は興味深いが、おそらく一般的な問題に遭遇しました。キャッシュがオンになっていると、匿名ユーザーの在庫はすぐには更新されません(これがキャッシュのポイントなので理にかなっています)。ただし、これによりUXWTFが少し発生します。製品の在庫がなくても、「1」がまだ利用可能であることがユーザーに表示されます。彼らがそれをカートに追加しようとしたときだけ、彼らは通知で会った

購入できる「商品名」の最大数は0です。

他のすべてのキャッシュを保持したいのですが、利用可能な在庫数のキャッシュを無効にする方法はありますか?


3
株価をブロックに引き込めますか?もしそうなら、あなたはブロックとして表示し、Ajaxのブロック使用することができますdrupal.org/project/ajaxblocks
keva

残念ながら、このアプローチは実際には単一の製品の表示/単一の製品エンティティでのみ機能します(または2つまたは3つの製品バリエーションがあったとしても)。このアプローチは、各製品の表示に2つ以上の製品バリエーションがある場合、扱いにくくなる可能性があります。
Nigel Waters、

AJAXまたはESI / SSI、あるいはその両方がdrupal.org/project/esiの 1つの答えです。キャッシュの無効化は他の回答drupal.org/project/cache_actionsです。これらはどちらも半複雑であり、ソリューションのドロップではありません。
mikeytown2 2012

私はこの問題drupal.org/node/1785158に遭遇したばかりで、モジュールの作者は「コマースサイトはキャッシングでうまく機能せず、drupalコマースも例外ではありません」と引用しています。
junedkazi 2012年

今は価値のある答えを書くことはできませんが、Drupal 7-ajax / frontpageを介してノードフィールドを更新する-AJAXとタイマーを使用してその1つのフィールドを更新することを検討してください。これにより、ユーザーがページを開いた後のQTYの変更も反映されます。
Mołot

回答:


1

ただのアイデア-この場合の回避策は、注文が行われた後に関数をフックし、プログラムでキャッシュを消去することです。

を使用してhook_commerce_checkout_complete()cache_clear_all()関数を呼び出すことができます。


cache_clear_all()はサイトキャッシュ全体をクリアするため、大きなパフォーマンスヒットにはなりません。また、サイトが混雑している場合は、混雑する可能性があります。
junedkazi 2012年

真; 私も同じことを考えていましたが、解決策はコマースモジュールからキャッシュのみを削除することです。正確に何を呼び出す必要があるか、またはそのための関数があるかどうかがわかりません。
Aram Boyajyan 2012年

2
@junedkazi cache_clear_allの実際の名前はやや不十分です。これはパラメータを受け入れ、クリアする個々のページ/キャッシュされたオブジェクトを指定できます。
jmking 14年

0

Drupalのキャッシングメカニズムは非常に柔軟です。特定の条件で「キャッシュ解除」するページの部分にカスタムキャッシュを使用できます。条件が満たされた場合(チェックアウト)、チェックアウトのフォーム送信で特定の$ cidのキャッシュをリセットするだけです。

キャッシングAPIの概要については、この投稿を参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.