yorumları toplu olarak silme


Yanıtlar:


7

AFAIK, VBO işi yapabilmeli, ancak yorumları silmek için kendim denemedim.

Başka bir yol, db'deki tüm sorguların bir listesini alan, yorum kimliklerinin bir dizisini oluşturan ve bu diziyi comment_delete_multiple işlevine geçiren bazı kodları çalıştırmak (bir modülde veya Devel modülünün 'execp php' bloğunda) . Bunun tamamlanması biraz zaman alabilir (sunucu performansına ve yorumların sayısına bağlı olarak), bu nedenle örneğin set_time_limit (http://php.net/manual/en/function) kullanarak bu şekilde çalışabilirsiniz. .set-time-limit.php) veya Drupal'ın toplu API'sı.

[güncelleme: Chris Cohen'in cevabına bakınız, örneğin bu yaklaşıma dayanan kod.]


7

Bu alternatif bir cevap değil, daha fazla marcvangend'in detayı, ama onun cevabı hakkında yorum yapamadım ve örnek kod bırakamadım. Devel'in yürütme kod bloğunu kullanan manuel yaklaşım biraz şöyle görünecektir:


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

comment_delete_multiple($cids);

Marcvangend'in belirttiği gibi, bu sunucunuzdaki yürütme süresi ile sınırlı olacaktır, bu nedenle çok fazla yorumunuz varsa geçici olarak yükseltmeniz gerekecektir. Dbtng yardımı için manarth ve instanceofjamie sayesinde.


1
Yön için teşekkürler, ancak sözdiziminiz kapalı. Tablo, commentbir takma comment_delte_multiple
ada

@brian_d comment_delte_multiple () için hazır olan ham nesne sonuçlarını nasıl işlersiniz?
jackocnr

2

Şahsen, Views Bulk Operations modülüne giderdim .

Bu modül, görüntülenen satırlarda toplu işlemlerin yürütülmesine izin vererek Görünümleri artırır. Bunu, her düğümün önünde bir onay kutusu göstererek ve uygulanabilecek işlemleri içeren bir seçim kutusu ekleyerek yapar. Drupal Çekirdek veya Kurallar eylemleri kullanılabilir.


0

Dürüst olmak gerekirse bunu yapmak gerektiğinde ben sadece veritabanında yaptım. Yorumları siliyorsunuz, yorum istatistiklerini ve pufunu düzeltiyorsunuz, tüm yorumlar gitti. Bazı garip bir şekilde yorumlarla etkileşimde bulunan modülleriniz varsa bunu yapmaktan kaçınırım, aksi takdirde önereceğim şey budur.

TRUNCATE TABLE yorumları

GÜNCELLEME node_comment_statistics SET comment_count = 0


Ben drupal API çağrısı kullanmanın avantajı comment_delete_multiplesizin için ek drupal kanca çağırabilir, DB potansiyel olarak daha temiz bırakarak olduğunu düşünüyorum.
brian_d

Bu yüzden yorumlarla etkileşimde bulunan modülleriniz varsa bunu yapmaktan kaçınmanızı öneririm. Aksi takdirde hisse senedi yorumlarınız varsa, bununla ilgili herhangi bir sorun görmedim. Binlerce yorum ile spam olmuş bir siteniz varsa kesinlikle çok daha kolay.
G.Martin

'Field_data_comment_body' tablosunu da kesmeniz gerekir, çünkü yorum içeriği burada saklanır.
Creynders

0

Bazı UI Araçları Aşağıdaki modülleri kurabilirsiniz

Görünümler - drupal.org/project/views

Her Drupal sitesinin ihtiyacı var, inanıyorum ... Arka uçta SQL üretir ve yapılandırılabilir ayarlar, filtreler, sıralama, sayfalama vb.

VBO - http://drupal.org/project/views_bulk_operations Toplu işlemlere izin vermek için (örneğin, bu konu için yorumları silin)

Yönetim Görünümleri - http://drupal.org/project/admin_views Views ve VBO'dan yararlanın, orijinal contnet, yorum, kullanıcı yönetici sayfalarını menu_alter ile değiştirin ...

  1. Yukarıdaki modülleri etkinleştirdikten sonra yorum yöneticisi sayfasına geri dönün
  2. Tümünü seç'i işaretleyin ( dikkatli olun , tüm yorumları silmek istediğinizden emin olun ...)
  3. "Sil" ve "Gönder" i seçin ( dikkatli olun , daha sonra onayla düğmesine gerek yok ...)

0

Backup and Migrate modülünü kullanarak yaklaşık 45.000 yorumu sildi. 'Verileri aşağıdaki tablolardan hariç tut' içindeki gelişmiş kurulumda - önce Ctrl tuşuna basın, ardından listeden yorumu seçin - (burada gereksiz önbellek tabloları zaten seçili olduğundan dikkatli olun) - yedekleme - bu yedeklenmiş dosyadan geri yükleyin. Yaşa!


0

Bu cevap zaten listelenmiş bir cevaba benzer, ancak yaklaşık 27.000 yorum için bir 'bellek yetersiz hatasını' önlemek için değiştirdim. Yorum sayısına bağlı olarak yürütülmesi biraz zaman alacaktır. Yorumlar tablosunu kısaltmak iyi bir fikir olmayabilir; Drupal'ın içeriğin silinmesi ile ilgilenmesine izin vermek en iyisidir.

Bir PHP betiği oluşturdum:

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

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

... sonra senaryoyu Drush ile çalıştırdı

drush @my_alias php-script my_script.php

0

Genellikle yorumları veya düğümleri toplu olarak silmek için VBO kullanmanızı öneririm, ancak yüz binlerce yorumunuz olduğunda ve çok fazla zamanınız yoksa, onaylanmamış tüm yorumları silecek bir sql sorgusu benim durumumda DB 1.2 Gb alan alıyor bu yorumlarla ilgili tüm revizyonlar ve veriler ile birlikte

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

-2

PHP filtresini etkinleştirin ve aşağıdaki kodla temel bir sayfa oluşturun:

<?php
  db_query("TRUNCATE TABLE {comment}");
  db_query("UPDATE {node_comment_statistics} SET comment_count = 0");
?>

1
Asla PHP filtresini böyle şeyler için kullanmayın (başka bir şey için bile, PHP filtresi genellikle
Alejandro Moreno
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.