Tôi có một loại nút "Bài viết" có chứa trường Đoạn lặp lại . Một trong các loại đoạn văn cho phép người dùng nhúng chế độ xem bằng trường tham chiếu thực thể. Khi kết xuất một nút Article chứa tham chiếu lượt xem, tôi đã nhúng chế độ xem được chọn vào hook_preprocess_paragraph
như sau:
$view_id = $paragraph->field_view->target_id;
$view = \Drupal\views\Views::getView($view_id);
$view->setDisplay('embed_1');
$vars['content'] = $view->preview();
Điều này đang hoạt động tốt, ngoại trừ khi tôi kích hoạt bộ nhớ đệm. Ví dụ: một trong các khung nhìn của tôi liệt kê các nút thuộc loại "Sự kiện". Khi tôi thêm một Sự kiện mới, nó không hiển thị trong danh sách cho đến khi tôi xóa bộ đệm. Tôi có thể buộc xóa bộ nhớ cache khi chèn / cập nhật / xóa "Sự kiện" nhưng tôi muốn sử dụng hệ thống thẻ bộ nhớ cache của Drupal 8 và chỉ làm mất hiệu lực nội dung được lưu trong bộ nhớ cache có chứa danh sách sự kiện. Vấn đề là tôi không thể làm cho nó hoạt động.
Cho đến nay tôi đã thử thêm các thẻ bộ đệm vào nút, chế độ xem và đoạn trong hook_preprocess_paragraph
và hook_preprocess_node
như thế này:
$vars['paragraph']->addCacheTags(['node_list']);
...
$view->storage->addCacheTags(['node_list']);
...
$vars['node']->addCacheTags(['node_list']);
Theo trang này node_list
có thể được sử dụng cho danh sách nút để vô hiệu hóa bộ đệm bất cứ khi nào một nút được cập nhật. Nhưng nó không có tác dụng. Có lẽ các móc tiền xử lý là muộn để thêm thẻ bộ nhớ cache?
Tôi đang thiếu gì?
Biên tập:
Sau một số thử nghiệm nữa tôi thấy rằng nếu tôi chỉnh sửa một sự kiện, những thay đổi có thể được nhìn thấy trong danh sách và nếu tôi xóa một sự kiện thì nó sẽ biến mất khỏi danh sách. Vấn đề chỉ xảy ra khi thêm các sự kiện mới.
$view-buildRenderable()
trong tệp twig của tôi? Khi sử dụng$view->preview()
tôi chỉ có thể làm{{ content }}
trong mẫu twig của mình nhưng nó không hoạt động.