it-swarm.asia

حذف التعليقات بشكل مجمّع

كيف يمكنني حذف جميع التعليقات دفعة واحدة؟ لقد رأيت كيفية القيام بذلك مع العقد والوحدة النمطية المجمعة ، كيفية حذف جميع العقد من نوع محتوى معين؟ لكنني أبحث في حل مماثل للتعليقات.

أنا أبحث عن حل لا يترك أي قطع أثرية في قاعدة البيانات. هل تعتبر المشاهدات المجمّعة أفضل حل؟

11
brian_d

AFAIK ، يجب أن يكون VBO قادرًا على القيام بالمهمة ، لكني لم أحاول بنفسي حذف التعليقات.

طريقة أخرى هي تشغيل بعض التعليمات البرمجية (في وحدة نمطية أو في كتلة 'تنفيذ php' في وحدة Devel) التي تحصل على قائمة بجميع الاستعلامات من قاعدة البيانات ، وتنشئ مجموعة من معرفات التعليقات وتمرر تلك المجموعة إلى comment_delete_multiple دالة. لاحظ أن هذا قد يستغرق بعض الوقت حتى يكتمل (اعتمادًا على أداء الخادم وعدد التعليقات) ، لذلك قد يكون لديك طريقك للتغلب على ذلك ، على سبيل المثال باستخدام set_time_limit (http://php.net/manual/en/function .set-time-limit.php) أو واجهة برمجة تطبيقات مجموعة Drupal.

[تحديث: انظر إجابة كريس كوهين على سبيل المثال التعليمات البرمجية القائمة على هذا النهج.]

7
marcvangend

هذه ليست إجابة بديلة ، بل أكثر تفصيلاً عن إجابة marcvangend ، لكن لم أستطع التعليق على إجابته وترك رمز المثال. لذا ، فإن الطريقة اليدوية ، باستخدام كتلة التعليمات البرمجية لتنفيذ devel ، ستبدو قليلاً مثل:


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

comment_delete_multiple($cids);

كما يشير marcvangend ، سيقتصر هذا على وقت التنفيذ على الخادم الخاص بك ، لذلك ستحتاج إلى رفعه مؤقتًا إذا كان لديك الكثير من التعليقات. بفضل manarth و exampleofjamie للمساعدة dbtng.

7
Chris Cohen

أنا شخصيًا سأختار وحدة المشاهدات المجمّعة للعمليات .

تعزز هذه الوحدة المشاهدات من خلال السماح بتنفيذ العمليات المجمعة على الصفوف المعروضة. يتم ذلك عن طريق إظهار مربع اختيار أمام كل عقدة ، وإضافة مربع تحديد يحتوي على العمليات التي يمكن تطبيقها. Drupal يمكن استخدام الإجراءات الأساسية أو القواعد.

2
Karl Jóhann

تشبه هذه الإجابة إجابة مدرجة بالفعل لكنني قمت بتعديلها لمنع "خطأ نفاد الذاكرة" لحوالي 27000 تعليق. سيستغرق تنفيذ ذلك بعض الوقت اعتمادًا على عدد التعليقات. قد لا يكون اقتطاع جدول التعليقات فكرة جيدة ؛ من الأفضل أن تترك Drupal يتعامل مع حذف المحتوى.

قمت بإنشاء PHP البرنامج النصي:

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

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

... ثم ركض البرنامج النصي مع Drush

drush @my_alias php-script my_script.php
0
Parag

بصراحة عندما كنت بحاجة للقيام بذلك فعلت ذلك فقط في قاعدة البيانات. قمت بحذف التعليقات ، وإصلاح إحصاءات التعليق وطي ، ذهب كل التعليقات. أتجنب القيام بذلك إذا كان لديك وحدات تتفاعل مع التعليقات بطريقة غريبة ، وإلا فإن ما أقترحه.

TRUNCATE TABLE التعليقات

تحديث node_comment_statistics SET comment_count = 0

0
G.Martin

تم حذف حوالي 45000 تعليق باستخدام وحدة النسخ الاحتياطي والترحيل. في الإعداد المتقدم في "استبعاد البيانات من الجداول التالية" - اضغط أولاً على مفتاح Ctrl ثم حدد التعليق في القائمة - (كن حذرًا لأنه هنا تم تحديد جداول ذاكرة التخزين المؤقت غير الضرورية بالفعل) - النسخ الاحتياطي - الاستعادة من هذا الملف الذي تم نسخه احتياطيًا. مرحى!

0
VivMajor

بعض أدوات واجهة المستخدم يمكنك تثبيت الوحدات أدناه

المشاهدات - drupal.org/project/views

كل Drupal ، أعتقد ... أنه يولد SQL في الخلفية ويعرض النتائج مع إعدادات قابلة للتكوين ، وفلاتر ، وفرز ، وترحيل ... إلخ

VBO - http://drupal.org/project/views_bulk_operations للسماح بالعمليات المجمعة (أي حذف التعليقات لهذا الموضوع)

طرق عرض الإدارة - http://drupal.org/project/admin_views استفد من طرق العرض و VBO ، واستبدل contnet الأصلي ، والتعليق ، وصفحات إدارة المستخدم بواسطة menu_alter ...

  1. بعد تمكين الوحدات المذكورة أعلاه ، ارجع إلى صفحة إدارة التعليقات
  2. ضع علامة على الكل ( كن حذرا ، تأكد من رغبتك في حذف جميع التعليقات ...)
  3. حدد "حذف" و "إرسال" ( كن حذرًا ، لا يوجد زر تأكيد بعد ذلك لاحقًا ...)
0
Ck Poon

عادةً ما أوصي باستخدام VBO لحذف التعليقات أو العقد بشكل مجمّع ، ولكن إذا كنت في موقف عندما يكون لديك مئات الآلاف من التعليقات وليس لديك الكثير من الوقت ، فإليك استعلام SQL الذي سيحذف جميع التعليقات غير المعتمدة جنبا إلى جنب مع جميع المراجعات والبيانات المتعلقة بتلك التعليقات التي كانت في حالتي تأخذ مساحة 1.2 جيجا بايت في 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