Drupal 8:Làm cách nào để đặt độ tuổi bộ nhớ cache theo chương trình cho mô-đun trong Drupal 8?
Tôi có mã cho một khối làm việc thành công và trả lại. Khối này được gọi là "RacerProfile" và nó đổ tất cả nội dung của nó vào biến "$ pageContent". Cuối cùng nó trả về #markup. Được. Bây giờ làm thế nào để tôi nói điều này để làm mất hiệu lực mỗi sáu giờ?
/**
* 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 ,],
);
}
}
Trong các câu trả lời khác của Drupal, tôi đã thấy "D8 có thẻ nhớ và ngữ cảnh sẽ tự động vô hiệu hóa khối nếu có điều gì đó thay đổi". Tốt, nhưng mã của tôi đang kiểm tra một cơ sở dữ liệu thứ hai. Không có cách nào để Drupal biết những gì đang thay đổi ở đó. (Nếu không kiểm tra, rõ ràng.) Vậy làm cách nào để thêm thẻ bộ nhớ cache với thời gian chờ được chỉ định? (Hoặc làm thẻ nhớ cache thậm chí làm điều đó?) Tôi không thể tìm thấy ví dụ.
Ghi chú:
-Mã trên không tạo ra kết quả mong muốn. Trang tĩnh đối với người dùng ẩn danh. Nó chỉ thay đổi khi người dùng/quản trị xóa bộ nhớ cache thông qua quản trị viên web.
- Rõ ràng, điều này không liên quan đến tuổi Cache tối đa trong khu vực quản trị của Cấu hình> Hiệu suất> Caching> Độ tuổi tối đa của bộ đệm trang. Tôi không muốn điều này áp dụng cho toàn bộ trang web, chỉ là khối này. Ngoài ra, cài đặt đó dường như không kiểm soát khía cạnh này của bộ đệm ẩn, nhưng thay vào đó thông tin bộ nhớ cache được plopped vào tiêu đề của các trang được hiển thị.
- Rõ ràng, điều này không liên quan đến settings.php theo bất kỳ cách nào, vì tôi không muốn áp dụng cho toàn bộ trang web và các mô-đun khác sẽ có các yêu cầu hết thời gian chờ khác nhau.
-Các lưu lượng truy cập cho trang web có khối lượng tương đối thấp, vì vậy nếu hiển thị một thứ bốn lần một ngày, ngay cả khi chỉ cần thực hiện một lần mỗi ngày thì không phải là vấn đề. Cứ sáu giờ một lần có nghĩa là nó đã thay đổi trước khi mọi người thức dậy qua bốn múi giờ. Chủ yếu là. ;) Tôi tuyên bố rõ ràng ở đây rằng tôi quan tâm đến việc có công việc này trước khi tôi lo lắng về việc tối ưu hóa tải hoặc sử dụng.
-Tôi có nhiều khối tùy chỉnh với các khoảng thời gian hết hạn khác nhau.
-Tôi chắc chắn đã googled nó rất nhiều, và chưa tìm thấy ví dụ xác định cụ thể (đo trong một đơn vị thời gian) timeout cho một khối mô-đun. Ngay cả trong các ví dụ về mô-đun D8 trên drupal.org
-Điều quan trọng, khối cần phải có bộ nhớ cache được kiểm soát cho người dùng ẩn danh. Những người không có tài khoản, "công chúng" duyệt trang web.
Tôi đã thử giải pháp này, có vẻ như nó không hoạt động. – Anders8
Bạn đã bật gỡ lỗi bộ nhớ cache để xem những gì đang được lưu vào bộ nhớ cache (https://www.drupal.org/developing/api/8/response/cacheable-response-interface#debugging)? Bạn có sử dụng khối này là những gì ngăn chặn bộ nhớ đệm? – acrosman
Tôi cũng có vấn đề chính xác này (thẻ bộ nhớ cache của tôi là "bên ngoài" vì vậy tôi muốn đặt độ tuổi tối đa cụ thể cho phản hồi trang này thay thế). Đặt dữ liệu bộ nhớ cache tối đa không hoạt động vì tệp 'PageCache.php' bỏ qua nó khi tính toán tiêu đề hết hạn cho trang. Xem hàm 'fetch' của lớp đó. – Brian