Drupal 8:如何以編程方式爲Drupal 8中的模塊設置緩存期限?
我有一個代碼塊成功地完成它的工作並返回它。該塊被稱爲「RacerProfile」,並將其所有內容轉儲到變量「$ pageContent」中。最後它返回#markup。好。現在我怎麼告訴這個讓每六個小時失效?
/**
* Provides a 'Racer Profile' Block
*
* @Block(
* id = "racer_profile",
* admin_label = @Translation("Slider v1 block")
*)
*/
class RacerProfile extends BlockBase {
/**
* {@inheritdoc}
*/
public function build()
{
// does all the work to make $pageContent via non-drupal
// database queries. However, for this example, let's just
// just imagine it gets the time of day. Then, let's set
// let's set the cache age to 5 seconds so F5-F5-F5-F5... should
// show 12 changes per minute on a repeatable schedule
$pageContent.= "<p> Date and Time: " . date("F jS Y h:i:s A");
return array(
'#markup' => $pageContent,
'#cache' => ['max-age' => 5 ,],
);
}
}
在其他Drupal的答案,我已經看到了「D8具有高速緩存標記和背景,如果有新的變化,這將自動失效塊。」很好,但我的代碼正在檢查第二個數據庫。 Drupal無法知道那裏發生了什麼變化。 (顯然沒有檢查。)那麼如何添加指定超時的緩存標記? (或者做緩存標籤甚至做到這一點?)我找不到例子。
備註:
- 上面的代碼不會產生所需的結果。該頁面對匿名用戶是靜態的。它只會在用戶/管理員通過Web管理員清除緩存時纔會更改。
- 顯然,這與配置>性能>緩存>頁面緩存最大使用期限的管理區域內的最大緩存使用期限無關。我不希望這適用於整個網站,只是這個塊。此外,該設置顯然無法控制緩存的這個方面,而是緩存到渲染頁面頭部的緩存信息。
- 顯然,這與settings.php無關,因爲我再也不想讓它適用於整個站點,並且各個模塊都有不同的超時要求。
- 該網站的流量相對較低,因此如果每天渲染一個東西四次,即使只需要每天完成一次也不是問題。每六個小時意味着在人們在四個時區中醒來之前它已經改變。大多。 ;)我明確表示,在我擔心優化負載或使用率之前,我有興趣開展此項工作。
- 我有不同的過期期限的多個自定義塊。
- 我當然已經用它搜索了很多,並且還沒有找到指定模塊塊的特定(以時間單位測量)超時的示例。即使在Drupal.org上的D8模塊示例中,也需要爲匿名用戶控制其緩存。沒有賬號的人,「公衆」瀏覽該網站。
我試過這個解決方案,它似乎不工作。 – Anders8
您是否啓用了緩存調試以查看緩存的內容(https://www.drupal.org/developing/api/8/response/cacheable-response-interface#debugging)?你使用這個塊是什麼阻止緩存? – acrosman
我也有這個確切的問題(我的緩存標籤是「外部」,所以我想爲此頁面響應設置特定的最大年齡)。設置最大年齡緩存數據不起作用,因爲在計算頁面的過期標題時,「PageCache.php」文件會忽略它。參見該類的函數'fetch'。 – Brian