it-swarm-id.com

menghapus komentar secara massal

bagaimana saya bisa menghapus semua komentar sekaligus? Saya telah melihat bagaimana melakukannya dengan modul node dan bulkdelete, Bagaimana 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?

11
brian_d

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 pertanyaan dari db, membangun larik ID komentar dan meneruskan larik itu ke comment_delete_multiple fungsi. 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.]

7
marcvangend

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.

7
Chris Cohen

Secara pribadi, saya akan pergi untuk modul Views Operasi 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. Drupal Tindakan inti atau Aturan dapat digunakan.

2
Karl Jóhann

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
0
Parag

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

0
G.Martin

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!

0
VivMajor

Beberapa Alat UI Anda dapat menginstal modul di bawah ini

Tampilan - drupal.org/project/views

Setiap Drupal kebutuhan situs, saya yakin ... 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 ...)
0
Ck Poon

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 1.2Gb ruang 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
0
Octan