Jak mogę usunąć wszystkie wersje węzłów / pól?

17

Mam 7 witryn drupal, w których przechowuje wersje węzłów i pól. Sprawdzam zmiany w przypadku, gdy przez pomyłkę zapisano nową wadliwą wersję i chcę wrócić.

Ale teraz chcę wyczyścić i zoptymalizować bazę danych, aby zajmować mniej miejsca na dysku twardym.

Jakie są metody usuwania wszystkich wersji oprócz bieżącej dla wszystkich węzłów / pól witryny?

Jan
źródło

Odpowiedzi:

13

Użyj modułu Usuwanie wersji węzła , aby usunąć swoje wersje i zarządzać nimi. (Jestem opiekunem modułu.)

Moduł usuwania zmian w węźle pozwala zarządzać wersjami węzła zgodnie z twoim wyborem. Pomaga zachować określoną liczbę poprawek dla węzła. Ten moduł zapewnia elastyczność stosowania usuwania wersji dla określonego typu treści i uruchamiania go w określonym czasie. Możesz zarządzać ustawieniami na stronie Administracja usuwania wersji węzła.

Kaushal Kishore
źródło
Czy można usunąć wersje poprawek za pomocą Node Revision Delete? Nie widzę w tym module żadnych opcji
BlondeSwan
15

Nie ma jeszcze stabilnej wersji do usuwania wersji, ale zbliża się port D7 (nie jestem pewien, czy w ogóle działa).

W tym wątku ktoś zasugerował użycie VBO do izolacji wersji i ich usunięcia.

Jeśli nie masz ochoty korzystać z interfejsu API, wykonaj pętlę przez wszystkie węzły, pobierz wersje za pomocą node_revision_list()i usuń je za pomocą node_revision_delete().

W ostateczności i jeśli lubisz bawić się z DB ( tak jak ja ), możesz usunąć wiersze field_revision_*i node_revisiontabele wersji. Spróbuj tego:

OSTRZEŻENIE: wcale nie testowane!

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

Możesz znaleźć pełną listę tabel poprawek w information_schemabazie danych:

SELECT DISTINCT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE 'field_revision%'
AND TABLE_SCHEMA = 'your_database';
tostinni
źródło
3
Moduł usuwania wersji węzła ma teraz stabilną wersję.
Bezpłatny radykalny
Testując to, uważam, że warunek kwerendy node_revision powinien być WHERE node.vid = node_revision.vid. Błędy takie, jakie są. Być może podaj też tabele w zapytaniu field_revision_body?
digitgopher
Moduł usuwania wersji wspomniany w tej odpowiedzi zaleca zamiast tego użycie Node Revision Delete, ponieważ nie potrzebujemy 5 modułów wykonujących to samo. Zobacz zaakceptowaną odpowiedź.
mbomb007
2

W tej samej sytuacji użyłem kodu poniżej:

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
źródło
1

Zrobiłem to dla ludzi VBO (wykonuj dowolne PHP), usunie wszystkie wersje (oprócz bieżących). Zależy to od wbudowanej kolejności sortowania node_revision_list(), dlatego przed użyciem danych na żywo wykonaj kopię zapasową bazy danych i sprawdź pożądane wyniki .

  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
źródło
Wygląda na to, że masz duży problem, aby uniknąć usunięcia bieżącej wersji (sortuj, licz). Ale node_revision_delete już uniemożliwia usunięcie bieżącej wersji.
dxvargas
0

Moduł usuwania wersji węzła ma teraz stabilną wersję.

Moduł usuwania zmian w węźle umożliwia śledzenie i przycinanie starych wersji typów zawartości. Cechy:

  • Zdefiniuj maksymalną liczbę poprawek do przechowywania według typu zawartości.
  • Uruchom na Drush, cron lub na inny okres (codziennie, co tydzień itp.).
Juampy NR
źródło