Acesta nu este un caz de utilizare valid pentru drupal_flush_all_caches(). Această funcție este pentru codul modificat sau nou. Pentru conținut, trebuie să utilizați etichete cache.
În cazul rar, în care nu este posibil să adăugați etichete cache corecte la toate matricele de randare, puteți invalida eticheta redat
, care este adăugat în mod implicit, chiar dacă nu sunt specificate etichete cache:
\Drupal\Core\Cache\Cache::invalidateTags(['rendat']);
Operațiunile entităților BTW sunt gestionate în tranzacții, astfel încât cererea concomitentă a paginii ar putea să nu vadă modificările până când nu sunt trimise în baza de date. În acest caz, o ștergere cache (sub orice formă) nu ajută.
Editare: Adăugarea unui exemplu pentru cel mai recent comentariu.
O soluție bună ar fi un lucrător la coadă. Se rulează în fundal, fără ca trebuie să așteptați ca panoul de administrare să răspundă după o salvare a nodului.
Exemplu:
În cârlig, adăugați un element de coadă cu ID-ul entității:
Media::postSave()
\Drupal::queue('media_entity_thumbnail')->createItem(['id' => $translation->id()]);
Ceea ce înseamnă adăugarea unui element de coadă pentru acest plugin de lucru pentru coadă:
/modules/media/src/Plugin/QueueWorker/ThumbnailDownloader.php
<?php
spațiu de nume Drupal\media\Plugin\QueueWorker;
utilizați Drupal\Core\Entity\EntityTypeManagerInterface;
utilizați Drupal\Core\Plugin\ContainerFactoryPluginInterface;
utilizați Drupal\Core\Queue\QueueWorkerBase;
utilizați Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Procesați o coadă de articole media pentru a le prelua miniaturile.
*
* @QueueWorker(
* id = "media_entity_thumbnail",
* title = @Translation ("Descărcător de miniaturi"),
* cron = {"timp" = 60}
* )
*/
clasa ThumbnailDownloader extinde QueueWorkerBase implementează ContainerFactoryPluginInterface {
/**
* Serviciul de gestionare a tipului de entitate.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protejat $entityTypeManager;
/**
* Construiește o nouă instanță de clasă.
*
* @param array $configurare
* O matrice de configurare care conține informații despre instanța pluginului.
* @param șir $plugin_id
* Plugin_id-ul pentru instanța de plugin.
* @param mixat $plugin_definition
* Definiția implementării pluginului.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* Serviciu de gestionare a tipului de entitate.
*/
funcția publică __construct(array $configurație, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->entityTypeManager = $entity_type_manager;
}
/**
* {@inheritdoc}
*/
funcția publică statică create(ContainerInterface $container, matrice $configurație, $plugin_id, $plugin_definition) {
returnează static nou (
$configurare,
$plugin_id,
$plugin_definition,
$container->get('entity_type.manager')
);
}
/**
* {@inheritdoc}
*/
funcția publică processItem($date) {
/** @var \Drupal\media\Entity\Media $media */
if ($media = $this->entityTypeManager->getStorage('media')->load($data['id'])) {
$media->updateQueuedThumbnail();
$media->salvare();
}
}
}
În mod implicit, cron rulează numai la fiecare 3 ore. Dacă aveți nevoie de HTML static într-un timp mai scurt, declanșați sarcina cron (care rulează și cozile) din afara site-ului web. Vedea https://www.drupal.org/docs/user_guide/en/security-cron.html