web-dev-qa-db-fra.com

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

J'ai un drupal 7 sites, où il conserve les révisions des nœuds et des champs. Je garde les 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 certaines méthodes pour supprimer toutes les révisions à l'exception de la révision actuelle, pour tous les nœuds/champs du site?

17
john

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 à garder 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 la suppression de la Node révision).

13
Kaushal Kishore

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

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 des révisions dans field_revision_* et node_revision les tables. 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 trouver la liste complète des tableaux de vos révisions dans le information_schema base de données:

SELECT DISTINCT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE 'field_revision%'
AND TABLE_SCHEMA = 'your_database';
15
tostinni

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);
}
2
mrded

J'ai fait cela pour les gens VBO (exécutez PHP arbitraire), cela supprimera toutes les révisions (sauf la version actuelle). Cela repose sur l'ordre de tri intégré à node_revision_list() , , donc 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);
1
Merrick

Node Revision Delete le module a maintenant une version stable.

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

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