
Comment auditer et nettoyer les fichiers médias inutilisés dans Drupal avec Entity Usage et Views
Si vous gérez un site Drupal depuis plus d'un an, vous avez probablement un problème avec votre médiathèque. Des images d'anciens billets de blogue, des PDF de produits désuets et des vidéos de campagnes précédentes y traînent et prennent de l'espace. Ils ralentissent vos sauvegardes, encombrent votre navigateur de médias et compliquent la vie de vos éditeurs de contenu.
Notre expérience démontre que la plupart des sites Drupal accumulent entre 30% et 50% de fichiers médias complètement inutilisés au cours de leurs trois premières années. Un client a récemment découvert qu'il sauvegardait 7 000 PDF inutilisés chaque soir – des fichiers qui n'étaient référencés nulle part sur son site depuis plus de deux ans.
La bonne nouvelle? Drupal offre plusieurs moyens efficaces pour identifier et supprimer ces fichiers inutilisés. Ce guide vous présente le processus exact en utilisant le module Entity Usage combiné avec Views, ainsi que quelques approches alternatives si vous avez besoin de quelque chose de plus simple ou de plus automatisé.
Prérequis
Avant de commencer à nettoyer les fichiers médias inutilisés dans Drupal, vous aurez besoin de :
- Drupal 10 ou 11 (ces instructions fonctionnent pour les deux versions)
- Accès à Composer pour installer des modules
- Permissions administratives pour configurer les modules et créer des Views
- Une sauvegarde récente de votre base de données et du répertoire de fichiers
- Accès SSH pour exécuter des commandes Drush (recommandé mais pas obligatoire)
Vous devriez aussi comprendre la configuration de base des Views dans Drupal. Si vous n'avez jamais créé de View auparavant, prenez 15 minutes pour vous familiariser avec l'interface des Views.
Mise en œuvre étape par étape pour le nettoyage des médias
Étape 1 : Installer les modules requis
Commencez par installer le module Entity Usage et Views Bulk Operations. Ces deux modules constituent la base de votre processus de nettoyage.
composer require drupal/entity_usage drupal/views_bulk_operations drush en entity_usage views views_ui views_bulk_operations -y
Si vous voulez des outils de nettoyage supplémentaires, installez aussi :
composer require drupal/unused_media_cleaner drupal/orphans_media drush en unused_media_cleaner orphans_media -y
Videz votre cache après avoir activé ces modules :
drush cr
Étape 2 : Configurer le suivi Entity Usage
Naviguez vers Configuration > Système > Entity Usage ou visitez directement /admin/config/system/entity-usage.
Sur cette page de configuration :
- Cochez la case à côté de Media sous « Suivre l'utilisation pour ces types d'entités »
- Activez le suivi pour tout autre type d'entité que vous voulez surveiller
- Enregistrez la configuration
Voici maintenant la partie importante : vous devez reconstruire la base de données de suivi d'utilisation. Ce processus analyse tout votre site et crée un registre indiquant où chaque élément média est actuellement utilisé.
Cliquez sur l'onglet « Mise à jour par lot » puis sur « Recalculer l'utilisation ». Selon la taille de votre site, cela peut prendre de quelques secondes à plusieurs minutes.
Étape 3 : Créer votre View de médias inutilisés
C'est ici que les choses deviennent intéressantes. Vous allez construire une View personnalisée qui affiche uniquement les éléments médias inutilisés.
Naviguez vers Structure > Vues et cliquez sur « Ajouter une vue ».
Configurez vos paramètres initiaux de View :
- Nom de la vue : « Audit des médias inutilisés »
- Afficher : Media
- Type : Tous
- Créer une page : Oui
- Chemin de la page : /admin/content/unused-media
- Format d'affichage : Tableau
- Éléments par page : 50
Cliquez sur « Enregistrer et modifier » pour accéder à l'interface de configuration des Views.
Étape 4 : Ajouter les champs essentiels
Dans la section Champs, ajoutez ces champs pour obtenir des informations utiles sur chaque élément média :
- Media : Nom - Affiche le titre du média
- Media : Type - Indique s'il s'agit d'une image, d'un document, d'une vidéo, etc.
- Media : Créé - Quand le fichier a été téléversé
- Media : Vignette - Aperçu visuel pour les images
- File : URI - Le chemin réel du fichier
Pour chaque champ, conservez les paramètres par défaut à moins de vouloir personnaliser les étiquettes ou le formatage.
Étape 5 : Configurer la relation Entity Usage
C'est l'étape cruciale qui fait tout fonctionner.
Dans la section Avancé à droite, trouvez Relations et cliquez sur Ajouter.
Recherchez « Entity Usage » et sélectionnez « Entity Usage : Usage ». Dans la configuration :
- Laissez « Exiger cette relation » décoché
- Appliquez la relation
Cette relation connecte vos éléments médias à leurs données de suivi d'utilisation.
Étape 6 : Activer l'agrégation et ajouter le compte d'utilisation
Toujours dans la section Avancé, trouvez « Utiliser l'agrégation » et réglez-la à Oui.
Retournez maintenant dans Champs et ajoutez un nouveau champ :
- Recherchez « Compte d'utilisation » (il devrait apparaître sous la relation Entity Usage)
- Configurez-le pour utiliser SOMME comme type d'agrégation
- Étiquetez-le « Nombre d'utilisations » ou quelque chose de similaire
Étape 7 : Filtrer pour les médias inutilisés seulement
Ajoutez un filtre pour afficher uniquement les médias inutilisés. Sous Critères de filtrage, cliquez sur Ajouter et recherchez « Compte d'utilisation ».
Configurez le filtre :
- Type d'agrégation : SOMME
- Opérateur : Est vide (NULL)
Ce filtre garantit que vous ne voyez que les éléments médias avec zéro utilisation sur votre site.
Étape 8 : Ajouter des opérations en masse
Pour réellement supprimer les médias inutilisés, ajoutez la fonctionnalité Views Bulk Operations.
Ajoutez un nouveau champ au début de votre liste de champs :
- Recherchez « Views bulk operations »
- Sélectionnez « Mise à jour en masse des médias »
- Dans la configuration, activez seulement l'action « Supprimer le média »
- Positionnez ce champ en premier dans votre liste de champs
Enregistrez votre View. Vous avez maintenant un outil d'audit de médias inutilisés fonctionnel pour les sites Drupal.
Exemples de code pour le nettoyage automatisé
Parfois, vous devez automatiser le processus de nettoyage. Voici une commande Drush personnalisée qui identifie et supprime les médias inutilisés :
getStorage('media');
// Charger toutes les entités médias
$media_ids = $media_storage->getQuery()
->accessCheck(FALSE)
->execute();
$deleted_count = 0;
$batch_size = 50;
foreach (array_chunk($media_ids, $batch_size) as $chunk) {
$media_entities = $media_storage->loadMultiple($chunk);
foreach ($media_entities as $media) {
// Vérifier si le média est utilisé
$usage = $entity_usage->listSources($media);
if (empty($usage)) {
// Vérifier à nouveau qu'il n'est pas référencé dans d'anciennes révisions
if ($this->checkRevisions($media)) {
continue;
}
$this->logger()->notice('Suppression du média inutilisé : ' . $media->label());
$media->delete();
$deleted_count ;
}
}
}
$this->logger()->success("$deleted_count éléments médias inutilisés supprimés.");
}
/**
* Vérifier si le média est utilisé dans d'anciennes révisions.
*/
private function checkRevisions($media) {
// Ajoutez votre logique de vérification des révisions ici
return FALSE;
}
}Pour une approche plus simple, vous pouvez créer un script de traitement par lot :
/**
* Processus par lot pour supprimer les fichiers inutilisés.
*/
function custom_cleanup_batch_delete() {
$batch = [
'title' => t('Suppression des médias inutilisés'),
'operations' => [],
'finished' => 'custom_cleanup_batch_finished',
];
// Obtenir les ID des médias inutilisés depuis Entity Usage
$query = \Drupal::database()->select('media', 'm')
->fields('m', ['mid'])
->condition('mid', \Drupal::database()->select('entity_usage', 'eu')
->fields('eu', ['target_id'])
->where('eu.target_type = :type', [':type' => 'media']), 'NOT IN');
$results = $query->execute()->fetchAll();
foreach ($results as $row) {
$batch['operations'][] = ['custom_cleanup_delete_media', [$row->mid]];
}
batch_set($batch);
}
/**
* Rappel d'opération par lot.
*/
function custom_cleanup_delete_media($mid, &$context) {
$media = Media::load($mid);
if ($media) {
$context['message'] = t('Suppression de @label', ['@label' => $media->label()]);
$media->delete();
}
}Erreurs courantes à éviter
Supprimer sans vérification
La plus grosse erreur que les gens commettent est de faire confiance aveuglément au rapport des médias inutilisés. Certains médias peuvent sembler inutilisés mais sont en fait :
- Référencés dans des blocs personnalisés qu'Entity Usage ne suit pas
- Intégrés avec des URL absolues dans les champs de corps de texte
- Utilisés dans des modèles de courriels ou des systèmes externes
- Référencés dans les zones de texte d'en-tête/pied de page des Views
Vérifiez toujours un échantillon de fichiers avant une suppression en masse. Choisissez 10 à 20 fichiers marqués comme inutilisés et vérifiez manuellement qu'ils ne sont vraiment pas nécessaires.
Ignorer les anciennes révisions
Nous avons constaté qu'Entity Usage manque parfois des références dans les anciennes révisions de nœuds. Si vous avez la modération de contenu activée ou conservez des historiques de révision complets, les médias qui semblent inutilisés pourraient encore être référencés dans des versions précédentes du contenu.
Avant de supprimer, demandez-vous si vous avez besoin de ces anciennes révisions. Si ce n'est pas le cas, nettoyez-les d'abord en utilisant le module Node Revision Delete.
Ne pas vérifier les références du système de fichiers
Certains sites référencent les fichiers directement par leurs chemins plutôt que par les entités médias. Exécutez cette requête pour vérifier les références directes de fichiers dans les champs de texte :
SELECT COUNT(*) FROM node__body WHERE body_value LIKE '%/sites/default/files/%';
Si vous trouvez beaucoup de références directes, vous aurez besoin d'une approche de nettoyage différente qui analyse les champs de texte pour les chemins de fichiers.
Oublier les traductions
Sur les sites multilingues, les médias peuvent être utilisés dans des versions traduites du contenu qu'Entity Usage ne détecte pas correctement. Testez toujours votre processus de nettoyage sur le contenu traduit avant de l'exécuter sur tout le site.
Exécuter pendant les heures de pointe
Les opérations de suppression par lot peuvent ralentir votre site. Planifiez le nettoyage pendant les périodes de faible trafic ou utilisez le traitement par file d'attente pour répartir la charge dans le temps.
Étapes de test et de vérification
Avant de supprimer quoi que ce soit de façon permanente, suivez ce processus de vérification :
1. Exporter votre liste de médias inutilisés
Depuis votre View de médias inutilisés, exportez les résultats en CSV. Cela vous donne un registre de ce que vous prévoyez supprimer et permet une révision manuelle.
2. Tester avec un petit lot
Sélectionnez 5 à 10 éléments médias inutilisés et supprimez-les manuellement. Ensuite :
- Videz toutes les caches
- Vérifiez les pages où ces éléments médias étaient précédemment téléversés
- Assurez-vous qu'aucune image brisée ou erreur de fichier manquant n'apparaît
- Consultez vos journaux pour tout avertissement connexe
3. Vérifier l'exactitude d'Entity Usage
Les équipes avec lesquelles nous travaillons rapportent qu'Entity Usage est exact à environ 95% dès l'installation. Pour vérifier son exactitude sur votre site :
- Choisissez un élément média qui apparaît comme « utilisé »
- Cliquez pour voir où il est supposément utilisé
- Visitez ces pages et confirmez que le média apparaît réellement
- Répétez pour plusieurs éléments médias
4. Vérifier vos sauvegardes
Assurez-vous que votre système de sauvegarde fonctionne avant toute suppression en masse :
# Créer une sauvegarde manuelle drush sql-dump --gzip > backup-avant-nettoyage.sql.gz # Vérifier que la taille du fichier de sauvegarde semble raisonnable ls -lh backup-avant-nettoyage.sql.gz
5. Surveiller après la suppression
Après avoir supprimé les médias inutilisés, surveillez votre site pendant 24 à 48 heures :
- Vérifiez vos journaux d'erreurs pour des avertissements de fichiers manquants
- Demandez aux éditeurs de contenu de signaler toute image manquante
- Examinez vos rapports 404 pour les tentatives d'accès aux fichiers supprimés
6. Vérification des performances
Après le nettoyage, vous devriez constater des améliorations dans :
- Le temps de chargement de la médiathèque (mesurez avant et après)
- La durée et la taille des sauvegardes
- Les performances des requêtes de base de données pour les opérations liées aux médias
Documentez ces améliorations pour justifier des calendriers de nettoyage réguliers.
Conclusion
Nettoyer les fichiers médias inutilisés dans Drupal n'a pas à être intimidant. Avec le module Entity Usage et une View correctement configurée, vous pouvez identifier et supprimer en toute sécurité les fichiers inutiles qui ralentissent votre site. La clé est de l'aborder méthodiquement : installer les bons outils, les configurer soigneusement, vérifier vos résultats et toujours conserver des sauvegardes.
Rappelez-vous que le nettoyage des médias n'est pas une tâche unique. Mettez en place un processus de révision trimestriel pour garder votre médiathèque sous contrôle. Vos éditeurs de contenu vous remercieront pour l'interface plus épurée, et votre administrateur système appréciera les sauvegardes plus petites et les opérations plus rapides du site.
Si vous gérez un grand site Drupal avec des milliers de fichiers médias et avez besoin d'aide pour mettre en place un processus de nettoyage automatisé adapté à votre flux de travail spécifique, nous pouvons vous aider à créer une approche personnalisée qui identifie en toute sécurité les médias inutilisés tout en préservant tout ce dont votre équipe de contenu a réellement besoin. Notre équipe a de l'expérience avec des migrations et des opérations de nettoyage de médias complexes qui nécessitent une gestion minutieuse du contenu historique et des considérations multilingues.
