Đây không phải là trường hợp sử dụng hợp lệ cho drupal_flush_all_caches(). Chức năng này dành cho mã mới hoặc đã thay đổi. Đối với nội dung, bạn phải sử dụng thẻ bộ đệm.
Trong trường hợp hiếm hoi, khi không thể thêm các thẻ bộ đệm chính xác vào tất cả các mảng kết xuất, bạn có thể vô hiệu hóa thẻ kết xuất
, được thêm theo mặc định, ngay cả khi không có thẻ bộ đệm nào được chỉ định:
\Drupal\Core\Cache\Cache::invalidateTags(['kết xuất']);
Các hoạt động của thực thể BTW được xử lý trong các giao dịch, vì vậy yêu cầu trang đồng thời có thể không thấy các thay đổi cho đến khi chúng được cam kết với cơ sở dữ liệu. Trong trường hợp này, xóa bộ đệm (dưới mọi hình thức) không giúp được gì.
Chỉnh sửa: Thêm ví dụ cho nhận xét mới nhất.
Một giải pháp hay sẽ là nhân viên xếp hàng. Nó chạy ở chế độ nền, nếu không có điều đó, bạn phải đợi bảng quản trị phản hồi sau khi lưu nút.
Ví dụ:
Trong hook, hãy thêm một mục hàng đợi có ID thực thể:
Phương tiện::postSave()
\Drupal::queue('media_entity_thumbnail')->createItem(['id' => $translation->id()]);
Đó là thêm một mục hàng đợi cho plugin công nhân hàng đợi này:
/modules/media/src/Plugin/QueueWorker/ThumbnailDownloader.php
<?php
không gian tên Drupal\media\Plugin\QueueWorker;
sử dụng Drupal\Core\Entity\EntityTypeManagerInterface;
sử dụng Drupal\Core\Plugin\ContainerFactoryPluginInterface;
sử dụng Drupal\Core\Queue\QueueWorkerBase;
sử dụng Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Xử lý hàng đợi các mục phương tiện để tìm nạp hình thu nhỏ của chúng.
*
* @QueueWorker(
* id = "media_entity_thumbnail",
* title = @Translation("Trình tải xuống hình thu nhỏ"),
* cron = {"thời gian" = 60}
* )
*/
lớp ThumbnailDownloader extends QueueWorkerBase thực hiện ContainerFactoryPluginInterface {
/**
* Dịch vụ quản lý kiểu thực thể.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
được bảo vệ $entityTypeManager;
/**
* Xây dựng một thể hiện lớp mới.
*
* @param mảng $configuration
* Một mảng cấu hình chứa thông tin về phiên bản plugin.
* @param chuỗi $plugin_id
* Plugin_id cho phiên bản plugin.
* @param hỗn hợp $plugin_definition
* Định nghĩa triển khai plugin.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* Dịch vụ quản lý loại thực thể.
*/
hàm công khai __construct(mảng $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager) {
cha mẹ::__construct($configuration, $plugin_id, $plugin_definition);
$this->entityTypeManager = $entity_type_manager;
}
/**
* {@inheritdoc}
*/
tạo hàm tĩnh công khai (ContainerInterface $container, mảng $configuration, $plugin_id, $plugin_definition) {
trả về tĩnh mới (
cấu hình $,
$plugin_id,
$plugin_definition,
$container->get('entity_type.manager')
);
}
/**
* {@inheritdoc}
*/
hàm công khai processItem($data) {
/** @var \Drupal\media\Entity\Media $media */
if ($media = $this->entityTypeManager->getStorage('media')->load($data['id'])) {
$media->updateQueuedThumbnail();
$media->save();
}
}
}
Theo mặc định, cron chỉ chạy cứ sau 3 giờ. Nếu bạn cần HTML tĩnh trong thời gian ngắn hơn thì hãy kích hoạt tác vụ cron (tác vụ này cũng chạy các hàng đợi) từ bên ngoài trang web. Nhìn thấy https://www.drupal.org/docs/user_guide/en/security-cron.html