Come posso eliminare tutte le revisioni nodo / campo?


17

Ho un drupal 7 siti, dove mantiene le revisioni dei nodi e dei campi. Continuo le revisioni per il caso in cui per errore viene salvata una nuova versione difettosa e voglio tornare indietro.

Ma ora voglio pulire e ottimizzare il database in modo da occupare meno spazio sul disco rigido.

Quali sono alcuni metodi per eliminare tutte le revisioni tranne quella corrente, per tutti i nodi / campi del sito?

Risposte:


13

Utilizzare il modulo Node Revision Delete per eliminare e gestire le revisioni. (Sono il manutentore del modulo.)

Il modulo di eliminazione revisione nodo consente di gestire le revisioni del nodo in base alla propria scelta. Ti aiuta a mantenere il numero specifico di revisioni per il nodo. Questo modulo offre la flessibilità di applicare l'eliminazione della revisione per il tipo di contenuto specifico ed eseguirlo nel momento specifico. È possibile gestire le impostazioni dalla pagina di amministrazione Elimina eliminazione nodo.


È possibile eliminare le revisioni dei campi con Node Revision Delete? Non vedo alcuna opzione per farlo con questo modulo
— BlondeSwan,

15

Non esiste ancora una versione stabile per l' eliminazione di Revision, ma è in arrivo una porta D7 (non sono sicuro che sia funzionale).

In questo thread qualcuno ha suggerito di usare VBO per isolare le revisioni ed eliminarle.

Se ti senti a tuo agio con l'API, fai un ciclo attraverso tutti i tuoi nodi, recupera le revisioni usando node_revision_list()ed eliminale usando node_revision_delete().

Come ultima risorsa e se ti piace fare confusione con il DB ( come faccio io ) puoi eliminare le righe field_revision_*e le node_revisiontabelle delle revisioni . Prova questo:

ATTENZIONE: non testato affatto!

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
);

Puoi trovare l'elenco completo delle tabelle delle tue revisioni nel information_schemadatabase:

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

3
Il modulo Node Revision Delete ora ha una versione stabile.
— Free Radical

Provando questo, credo che la condizione sulla query node_revision dovrebbe essere WHERE node.vid = node_revision.vid. Errori come sono. Forse specificare anche le tabelle nella query field_revision_body?
— digitgopher

Il modulo di eliminazione delle revisioni menzionato in questa risposta consiglia invece di utilizzare Node Revision Delete, poiché non sono necessari 5 moduli che fanno la stessa cosa. Vedi risposta accettata
— mbomb007,

2

Nella stessa situazione ho usato il codice qui sotto:

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

1

Ho fatto questo per la gente di VBO (esegui PHP arbitrario), eliminerà tutte le revisioni (tranne quelle correnti). Questo si basa sull'ordinamento incorporato node_revision_list(), quindi esegui il backup del tuo DB e verifica i risultati desiderati prima di utilizzare i dati attivi .

  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);

Sembra che tu abbia un grosso problema per evitare di eliminare la revisione corrente (ordinamento, conteggio). Ma node_revision_delete impedisce già di eliminare la revisione corrente.
— dxvargas,

0

Il modulo Node Revision Delete ora ha una versione stabile.

Il modulo Node Revision Delete ti permette di tracciare e eliminare le vecchie revisioni dei tipi di contenuto. Caratteristiche:

  • Definire la quantità massima di revisioni da conservare per tipo di contenuto.
  • Esegui su Drush, cron run o in un altro periodo (giornaliero, settimanale, ecc.).
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.