Bagaimana saya bisa menghapus semua revisi node / bidang?


17

Saya memiliki 7 situs drupal, tempat ia menyimpan revisi node dan field. Saya menyimpan revisi untuk kasus di mana secara tidak sengaja versi yang salah baru disimpan dan saya ingin kembali.

Tapi, sekarang saya ingin membersihkan dan mengoptimalkan database sehingga mengambil lebih sedikit ruang di hard disk.

Apa sajakah metode menghapus semua revisi kecuali yang sekarang, untuk semua node / bidang situs?

Jawaban:


13

Gunakan modul Hapus Node Revisi untuk menghapus dan mengelola revisi Anda. (Saya adalah pengelola modul.)

Modul Hapus Revisi Node memungkinkan Anda mengelola revisi Node sesuai pilihan Anda. Ini membantu Anda untuk menjaga jumlah revisi untuk node. Modul ini memberi Anda fleksibilitas untuk menerapkan penghapusan revisi untuk jenis konten tertentu dan menjalankannya pada waktu tertentu. Anda dapat mengelola pengaturan Anda dari Halaman Administrasi Revisi Node.


Bisakah Anda menghapus revisi bidang dengan Hapus Revisi Node? Saya tidak melihat opsi untuk melakukannya dengan modul ini
BlondeSwan

15

Belum ada rilis stabil untuk penghapusan Revision tetapi port D7 sedang dalam perjalanan (tidak yakin apakah itu fungsional sama sekali).

Di utas ini, seseorang menyarankan menggunakan VBO untuk mengisolasi revisi dan menghapusnya.

Jika Anda merasa nyaman dengan API, buat loop melalui semua node Anda, ambil revisi menggunakan node_revision_list()dan hapus menggunakan node_revision_delete().

Sebagai upaya terakhir dan jika Anda suka mengotak-atik DB ( seperti saya lakukan ), Anda dapat menghapus baris field_revision_*dan node_revisiontabel revisi . Coba ini:

PERINGATAN: tidak diuji sama sekali!

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

Anda dapat menemukan daftar lengkap tabel revisi Anda di information_schemadatabase:

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

3
Modul Hapus Node Revisi sekarang memiliki rilis yang stabil.
Radikal Bebas

Menguji ini, saya percaya kondisi pada permintaan node_revision seharusnya WHERE node.vid = node_revision.vid. Kesalahan apa adanya. Mungkin menentukan tabel pada kueri field_revision_body juga?
digitgopher

Modul Penghapusan Revisi yang disebutkan dalam jawaban ini merekomendasikan menggunakan Node Revision Delete sebagai gantinya, karena kita tidak perlu 5 modul melakukan hal yang sama. Lihat jawaban yang diterima.
mbomb007

2

Dalam situasi yang sama saya menggunakan kode di bawah ini:

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

Saya membuat ini untuk orang-orang VBO (menjalankan PHP sewenang-wenang), itu akan menghapus semua revisi (kecuali saat ini). Ini bergantung pada urutan penyortiran node_revision_list(), jadi buat cadangan DB & uji untuk hasil yang diinginkan sebelum digunakan pada data langsung .

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

Sepertinya Anda mengalami masalah besar untuk menghindari menghapus revisi saat ini (urutkan, hitung). Tetapi node_revision_delete sudah mencegah menghapus revisi saat ini.
dxvargas

0

Modul Hapus Node Revisi sekarang memiliki rilis yang stabil.

Modul Hapus Node Revisi memungkinkan Anda untuk melacak dan memangkas revisi tipe konten lama. Fitur:

  • Tentukan jumlah maksimum revisi untuk disimpan per jenis konten.
  • Jalankan di Drush, cron run atau pada periode yang berbeda (harian, mingguan, dll).
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.