menghapus komentar secara massal

11

bagaimana saya bisa menghapus semua komentar sekaligus? Saya telah melihat bagaimana melakukannya dengan modul node dan bulkdelete, Bagaimana cara menghapus semua node dari jenis konten yang diberikan? tetapi saya melihat solusi yang sama untuk komentar.

Saya mencari solusi yang tidak meninggalkan artefak dalam database. Apakah Operasi Tampilan Massal merupakan solusi terbaik?

brian_d
sumber

Jawaban:

7

AFAIK, VBO seharusnya bisa melakukan pekerjaan itu, tetapi saya belum mencobanya sendiri untuk menghapus komentar.

Cara lain adalah dengan menjalankan beberapa kode (dalam modul atau di blok 'eksekusi php' modul Devel) yang mendapat daftar semua kueri dari db, membuat larik ID komentar dan meneruskan larik itu ke fungsi comment_delete_multiple . Perhatikan bahwa ini bisa memakan waktu cukup lama untuk diselesaikan (tergantung pada kinerja server dan jumlah komentar), jadi Anda mungkin harus mengatasinya, misalnya dengan menggunakan set_time_limit (http://php.net/manual/en/function) .set-time-limit.php) atau API batch Drupal.

[perbarui: lihat jawaban Chris Cohen untuk kode contoh berdasarkan pendekatan ini.]

marcvangend
sumber
7

Ini bukan jawaban alternatif, lebih merupakan penjabaran dari marcvangend, tetapi saya tidak bisa mengomentari jawabannya dan meninggalkan contoh kode. Jadi pendekatan manual, menggunakan blok kode eksekusi devel, akan terlihat sedikit seperti:


$cids = db_select('comment', 'c')
  ->fields('c', array('cid'))
  ->execute()
  ->fetchCol();

comment_delete_multiple($cids);

Seperti yang ditunjukkan oleh marcvangend, ini akan terbatas pada waktu eksekusi di server Anda, jadi Anda perlu menaikkannya untuk sementara jika Anda memiliki banyak komentar. Terima kasih kepada manarth dan instanceofjamie atas bantuan dbtng.

Chris Cohen
sumber
1
Terima kasih untuk arahannya, tetapi sintaks Anda tidak aktif. commentcomment_delte_multiple
Tabelnya
@brian_d bagaimana Anda memproses hasil objek mentah siap untuk comment_delte_multiple ()?
jackocnr
2

Secara pribadi, saya akan pergi untuk modul Operasi Tampilan Massal .

Modul ini menambah Tampilan dengan memungkinkan operasi massal untuk dieksekusi pada baris yang ditampilkan. Itu melakukannya dengan menunjukkan kotak centang di depan setiap node, dan menambahkan kotak pilih yang berisi operasi yang dapat diterapkan. Tindakan Drupal Core atau Aturan dapat digunakan.

Karl Jóhann
sumber
0

Jujur ketika saya perlu melakukan ini, saya hanya melakukannya di database. Anda menghapus komentar, memperbaiki statistik dan poof komentar, semua komentar hilang. Saya akan menghindari melakukan ini jika Anda memiliki modul yang berinteraksi dengan komentar dengan cara yang aneh, kalau tidak itu yang saya sarankan.

Komentar tabel TRUNCATE

UPDATE node_comment_statistics SET comment_count = 0

G. Martin
sumber
Saya pikir keuntungan menggunakan panggilan API drupal comment_delete_multipleadalah dapat memanggil kait drupal tambahan untuk Anda, sehingga DB Anda berpotensi lebih bersih.
brian_d
Itulah sebabnya saya katakan saya sarankan menghindari melakukannya jika Anda memiliki modul yang berinteraksi dengan komentar. Kalau tidak, jika Anda memiliki komentar stok, saya tidak pernah mencatat masalah dengannya. Ini tentu jauh lebih mudah dilakukan jika Anda memiliki situs yang telah mendapat spam dengan ribuan komentar.
G.Martin
Anda perlu memotong tabel 'field_data_comment_body' juga, karena di situlah konten komentar disimpan.
Creynders
0

Beberapa Alat UI Anda dapat menginstal modul di bawah ini

Tampilan - drupal.org/project/views

Setiap situs Drupal membutuhkan, saya percaya ... Ini menghasilkan SQL di backend dan menampilkan hasil dengan pengaturan yang dapat dikonfigurasi, filter, pengurutan, paging ... dll

VBO - http://drupal.org/project/views_bulk_operations Untuk memungkinkan operasi massal (mis. Hapus komentar untuk utas ini)

Tampilan Administrasi - http://drupal.org/project/admin_views Manfaatkan Tampilan dan VBO, ganti contnet asli, komentar, halaman admin pengguna dengan menu_alter ...

  1. Setelah mengaktifkan modul di atas, kembali ke halaman admin komentar
  2. Centang pilih semua ( hati-hati , pastikan Anda ingin menghapus semua komentar ...)
  3. Pilih "Hapus" dan "Kirim" ( hati-hati , tidak ada lagi tombol konfirmasi ...)
Ck Poon
sumber
0

Dicapai menghapus sekitar 45.000 komentar dengan menggunakan modul Cadangan dan Migrasi. Pada pengaturan lanjutan dalam 'Kecualikan data dari tabel berikut' - pertama tekan tombol Ctrl kemudian pilih komentar dalam daftar - (hati-hati karena di sini tabel cache yang tidak perlu sudah dipilih) - cadangan - pulihkan dari file yang dicadangkan ini. Hore!

VivMajor
sumber
0

Jawaban ini mirip dengan jawaban yang sudah terdaftar tetapi saya memodifikasinya untuk mencegah 'kesalahan memori habis' sekitar 27.000 komentar. Ini akan memakan waktu cukup lama untuk dieksekusi tergantung pada jumlah komentar. Memotong tabel komentar saja mungkin bukan ide yang bagus; yang terbaik adalah membiarkan Drupal menangani penghapusan konten.

Saya membuat skrip PHP:

$cids = db_select('comment', 'c')
  ->fields('c', array('cid'))
  ->execute()
  ->fetchCol();

foreach($cids as $cid)
{
  comment_delete($cid);
}

... lalu jalankan skrip dengan Drush

drush @my_alias php-script my_script.php
Parag
sumber
0

Saya biasanya akan merekomendasikan untuk menggunakan VBO untuk menghapus komentar atau node dalam jumlah besar tetapi jika Anda berada dalam situasi ketika Anda memiliki ratusan ribu komentar dan Anda tidak punya banyak waktu, di sini adalah kueri sql yang akan menghapus semua komentar yang tidak disetujui. bersama dengan semua revisi dan data yang terkait dengan komentar-komentar yang dalam kasus saya mengambil ruang 1.2Gb di DB

DELETE c, rcb, dcb
FROM
    comment AS c
JOIN field_revision_comment_body AS rcb ON (c.cid = rcb.entity_id)
JOIN field_data_comment_body AS dcb ON (rcb.entity_id = dcb.entity_id)
WHERE
    c. STATUS = 0
Oktan
sumber
-2

Aktifkan filter PHP, dan buat halaman dasar dengan kode berikut:

<?php
  db_query("TRUNCATE TABLE {comment}");
  db_query("UPDATE {node_comment_statistics} SET comment_count = 0");
?>
jordi
sumber
1
tidak pernah menggunakan filter PHP untuk hal-hal seperti itu (bahkan untuk hal lain, filter PHP umumnya adalah salah satu ide terburuk di Drupal)
Alejandro Moreno