it-swarm.asia

كيفية حذف 1600 مستخدم و 2500 مشاركة؟

قبل بضع سنوات ، قمت بتكوين موقع باستخدام Drupal 6.9 ، ثم نسيت ذلك. لدي 160 صفحة من المستخدمين جميعهم من مرسلي البريد العشوائي وأحتاج إلى حذف الكل باستثناء 3. القيام بهذا واحد الصفحة في كل مرة بطيئة بشكل مؤلم بسبب مكالمات MySQL (على ما أظن). ولدي أيضًا حوالي 2500 مشاركة في المنتدى لحذفها.

أخشى قليلاً حذف السجلات من قاعدة البيانات مباشرة.

رأيت وحدة تسمى "حذف جماعي" ، لكنها Drupal الإصدار 5 وغير متاح للإصدار 6.

10
John R

يمكنك استخدام طرق عرض مجمّعة ، وهي وحدة تسمح بتنفيذ عمليات مجمعة على العقد والمستخدمين والتعليقات ؛ كما يسمح بتطبيق العملية المحددة على جميع العقد أو المستخدمين أو التعليقات باستخدام Batch API . تسمح واجهة برمجة تطبيقات الدُفعة بتوزيع معالجة النماذج على عدة طلبات للصفحات ، مما يضمن عدم مقاطعة المعالجة بسبب مهلة PHP ، مع السماح للمستخدم بتلقي تعليقات حول تقدم العمليات الجارية .

17
kiamlaluno

هذه الطريقة لقتل العقد بطيئة جدًا ، ولكنها أكثر أمانًا

function MYMODULE_menu(){
  $items['admin/mymodule/killnodes/%'] = array(
      'title' => 'Kill nodes',
      'page callback' => 'kill_nodes',
      'page arguments' => array(3),
      'type' => MENU_CALLBACK,
      'access arguments' => array('administer site configuration'),
  );
  return $items;
}

function kill_nodes($type){
  $query = "SELECT node.nid AS nid FROM {node} node WHERE node.type IN ('%s')";
  $result = db_query($query, $type);
  $count = 0;
  while($row = db_fetch_object($result)){
    node_delete($row->nid);
    $count++;
  }
  $message = t('!count nodes has been killed. Pif-Paf!', array('!count' => $count));
  drupal_set_message($message);
  return t("That's all folks");
}

بالنسبة للمستخدمين ، هل يمكنك تحديد المستخدم الذي تريد إزالته برمجياً؟ إذا كان من الممكن ، يمكنك استخدام الوظيفة السابقة كمثال لإزالة المستخدمين غير المرغوب فيهم.

3
dobeerman

بدلاً من إنشاء وحدة مخصصة لهذه المهمة ، يمكنك استخدام برنامج نصي بسيط وتنفيذه باستخدام Drush . نظرًا لأنك تحتاج إلى معالجة الكثير من المستخدمين والعقد ، فمن المستحسن استخدام Batch API (ويمكن يمكن استخدامه مع Drush ).

3
Pierre Buyle

إذا كنت ، مثلي ، تفضل نهج Python (نادرًا ما يكون موجودًا هنا ، ولكن لا يزال) ، فهذه طريقة شفافة وفعالة لإصلاح هذه المشكلة:

import os

# Build up a variable containing the usernames
# This list was built using drush sql-cli, then
# SELECT name FROM users 
#   where $your-where-condition 
#   order by uid asc 
#   INTO 
#     OUTFILE '/tmp/users.csv' 
#     FIELDS TERMINATED BY ',' 
#     ENCLOSED BY '"' 
#     lines terminated by ', ' ;
users = [result from SQL goes here]

for user in users:
    print("Deleting spam user: %s..." % user),
    os.system('drush --yes -r $your-path-to-drupal -l $your-site-url user-cancel --delete-content %s > /dev/null' % user) 
    print 'Done'

الخطوات هي في الأساس:

  1. قم بتسجيل الدخول إلى قاعدة البيانات الخاصة بك باستخدام drush sql-cli -r $your-path-to-drupal -l $your-site-url
  2. قم بتشغيل SQL أعلاه بشرطك الخاص ولصق النتائج في متغير المستخدمين.
  3. قم بتحديث المسار drupal واسم الموقع في الأمر drush
  4. شغّل النص باستخدام python delete-users.py

أنا متأكد من أن هناك طريقة أفضل للقيام بذلك ، ولكن هذا هو الحل المخترق الذي يعمل بشكل جيد.

2
mlissner

استخدم مستخدم متقدم الوحدة النمطية. تضيف هذه الوحدة علامة تبويب "متقدمة" إلى صفحة إدارة المستخدمين. في علامة التبويب هذه ، يمكنك تصفية المستخدمين حسب أي سمة (الدور والحالة وما إلى ذلك) وتحديد الكل. إذا حددت طريقة الحذف للمستخدمين كحذف المستخدم وإزالة كل المحتوى ، يمكنك أيضًا حذف كل المحتوى الذي قام بإنشائه.

1
Sinan Erdem

لقد قمت بتطبيق وحدة مخصصة لحذف جميع المستخدمين بشكل مستمر 7. في منطقة المشرف/الأشخاص ، هناك نموذج جديد لإكمال هذه العملية.

جدا مع الثمار.

هو مشروع رمل. شكرا.

رابط للمشروع =

1
lgrtm

جرب هذه الوحدات النمطية لـ D6:

تقليم المستخدم https://drupal.org/project/user_Prune وحذف المستخدم https://drupal.org/project/user_delete

يتيح لك User Prune حذف المستخدمين غير النشطين بشكل جماعي بناءً على المعايير التي تحددها.

يتيح لك حذف المستخدم حذف مستخدم وحذف جميع المحتويات المرسلة بما في ذلك العقد والتعليقات

1
FreeScholar

الوحدة حذف الكل يمكن أن تكون مفيدة.

بمجرد التثبيت ، يمكنك القيام بذلك ، على سبيل المثال:

drush delete-all articles

أو

drush delete-all users

نسخة دروبال 6 في ديف ولكن من الملاحظات:

يجب أن يعمل كل شيء باستثناء الحذف السريع.

0
Mauro Sardu