ノードの公開日に基づいてノードを個別にキャッシュしたいと考えています。古いノードは、新しいノードよりも長くキャッシュされる可能性があります。cache_set を個別に使用してキャッシュできると思っていましたが、ノードはデフォルトでキャッシュされるため、キャッシュに有効期限を設定したほうがよいことに気付きました。これを行う方法について何か考えはありますか?おそらくフック?
2 に答える
Drupal にはノード キャッシュ自体がありません。匿名ユーザーに対してページ キャッシュを有効にしている場合、ノードのキャッシュ データは次の 3 つのテーブルに分散される可能性があります。
cache_content
このテーブルは、file_fields や [プレーン テキスト] が選択されたテキスト領域などの入力フィルターを通過しないフィールドの値をキャッシュします。
cache_filter
このテーブルは、[リッチ テキスト] が選択された本文や CCK テキスト領域などのリッチ テキスト フィールドのフィルター処理された値をキャッシュします。
cache_page
このテーブルは、匿名の訪問者が見た、再表示されたページ出力全体をキャッシュします
これらのキャッシュ行がいつ期限切れになるかを正確に指示する方法がわからないので、関数を作成する必要があります
カスタム ルールに基づいて特定のノードのすべてのキャッシュをクリアする場合は、 HOOK_cron 内でcache_clear_all関数を使用してそれを実現できます。最初に、キャッシュ削除の基準を満たすノードを特定する必要があります。次に、「cid」ワイルドカード パラメータを指定して cache_clear_all を使用できます。次のようなものです (これはカスタム モジュールの HOOK_cron 関数内にあり、適切な cron ジョブが設定されている必要があります):
<?php
$wildcard = //Your criteria for the cache_content table;
cache_clear_all($wildcard, 'cache_content', TRUE);
$wildcard = //Your criteria for the cache_filter table;
cache_clear_all($wildcard, 'cache_filter', TRUE);
$wildcard = //Your criteria for the cache_page table;
cache_clear_all($wildcard, 'cache_page', TRUE);
ここでの主なポイントは、Drupal のビルトイン キャッシュの有効期限をオーバーライドするのは非常に難しいということだと思います。
試してみるかもしれませんがhook_flush_caches()
、それがあなたの探しているものかどうかは完全にはわかりません.ただの考えです.
別の可能な手段はdrupal_page_cache_header()
.
HTH。:)