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.