Comment puis-je supprimer toutes les révisions de nœud / champ?

17

J'ai un site drupal 7, où il conserve les révisions des nœuds et des champs. Je garde des révisions pour le cas où par erreur une nouvelle version défectueuse est enregistrée et je veux revenir en arrière.

Mais maintenant, je veux nettoyer et optimiser la base de données afin de prendre moins d'espace sur le disque dur.

Quelles sont les méthodes de suppression de toutes les révisions à l'exception de la révision actuelle, pour tous les nœuds / champs du site?

John
la source

Réponses:

13

Utilisez le module Node Revision Delete pour supprimer et gérer vos révisions. (Je suis le responsable du module.)

Le module Node Revision Delete vous permet de gérer les révisions du Node selon votre choix. Il vous aide à conserver le nombre spécifique de révisions pour le nœud. Ce module vous offre la flexibilité nécessaire pour appliquer la suppression de révision pour le type de contenu spécifique et l'exécuter à l'heure spécifique. Vous pouvez gérer vos paramètres à partir de la page d'administration de suppression de révision de nœud.

Kaushal Kishore
la source
Pouvez-vous supprimer des révisions de champ avec Node Revision Delete? Je ne vois aucune option pour le faire avec ce module
BlondeSwan
15

Il n'y a pas encore de version stable pour la suppression de la révision, mais un port D7 est en route (je ne sais pas du tout s'il est fonctionnel).

Dans ce fil, quelqu'un a suggéré d'utiliser VBO pour isoler les révisions et les supprimer.

Si vous vous sentez à l'aise avec l'API, faites une boucle à travers tous vos nœuds, récupérez les révisions en utilisant node_revision_list()et supprimez-les en utilisant node_revision_delete().

En dernier recours et si vous aimez jouer avec la base de données ( comme moi ), vous pouvez supprimer les lignes field_revision_*et les node_revisiontables des révisions . Essaye ça:

ATTENTION: pas testé du tout!

DELETE FROM field_revision_body
WHERE NOT EXISTS (
  SELECT NULL
  FROM node
  WHERE vid = revision_id
);

DELETE FROM node_revision
WHERE NOT EXISTS (
  SELECT NULL
  FROM node
  WHERE node.vid = node_revision.vid
);

Vous pouvez retrouver la liste complète des tableaux de vos révisions dans la information_schemabase de données:

SELECT DISTINCT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE 'field_revision%'
AND TABLE_SCHEMA = 'your_database';
tostinni
la source
3
Le module Node Revision Delete a désormais une version stable.
Radical gratuit
En testant cela, je pense que la condition sur la requête node_revision devrait être WHERE node.vid = node_revision.vid. Erreurs telles quelles. Peut-être spécifier également les tables de la requête field_revision_body?
digitgopher
Le module de suppression de révision mentionné dans cette réponse recommande d'utiliser plutôt la suppression de révision de nœud, car nous n'avons pas besoin de 5 modules faisant la même chose. Voir la réponse acceptée.
mbomb007
2

Dans la même situation, j'ai utilisé le code ci-dessous:

foreach (node_load_multiple($nids) as $node) {
  // Delete sub revisions.
  foreach (node_revision_list($node) as $vid => $revision) {
    node_revision_delete($vid);
  }
  // Delete archived revisions.
  revisioning_delete_archived_revisions($node);
}
mrded
la source
1

J'ai fait cela pour les gens VBO (exécutez PHP arbitraire), cela supprimera toutes les révisions (sauf la version actuelle). Cela dépend de l'ordre de tri intégré node_revision_list(), alors sauvegardez votre base de données et testez les résultats souhaités avant d'utiliser des données en direct .

  krumo($entity);

  $revision_array = node_revision_list($entity);  
  $revision_array_ASC = array_reverse($revision_array, TRUE);
  krumo($revision_array_ASC);
  krumo(count($revision_array_ASC));

  foreach ($revision_array_ASC as $vid => $node) {
    $count = count($revision_array_ASC);
    if ($count > 1) {
          node_revision_delete($vid);
    }
  }

  $revision_array = node_revision_list($entity);  
  krumo($revision_array);
Merrick
la source
Il semble que vous ayez beaucoup de mal à éviter de supprimer la révision actuelle (trier, compter). Mais node_revision_delete empêche déjà la suppression de la révision actuelle.
dxvargas
0

Le module Node Revision Delete a désormais une version stable.

Le module Node Revision Delete vous permet de suivre et d'élaguer les anciennes révisions des types de contenu. Fonctionnalités:

  • Définissez le nombre maximum de révisions à conserver par type de contenu.
  • Exécuter sur Drush, cron run ou sur une période différente (quotidienne, hebdomadaire, etc.).
Juampy NR
la source