it-swarm-vi.com

Làm thế nào để xóa 1600 người dùng và 2500 bài viết?

Cách đây vài năm, tôi đã định cấu hình một trang web với Drupal 6,9, và sau đó tôi quên nó. Tôi có 160 trang người dùng là tất cả những người gửi thư rác và tôi cần xóa tất cả trừ 3. Làm điều này Trang tại một thời điểm rất chậm do các cuộc gọi MySQL (tôi đoán). Tôi cũng có khoảng 2500 bài đăng diễn đàn để xóa.

Tôi hơi ngại xóa hồ sơ từ cơ sở dữ liệu trực tiếp.

Tôi đã thấy một mô-đun gọi là "xóa hàng loạt", nhưng nó dành cho Drupal phiên bản 5 và không có sẵn cho phiên bản 6.

10
John R

Bạn có thể sử dụng Lượt xem hoạt động hàng loạt , một mô-đun cho phép thực hiện các hoạt động hàng loạt trên các nút, người dùng, nhận xét; nó cũng cho phép áp dụng thao tác đã chọn cho tất cả các nút, người dùng hoặc nhận xét bằng cách sử dụng API hàng loạt . API bó cho phép xử lý biểu mẫu được trải đều trên một số yêu cầu trang, do đó đảm bảo rằng quá trình xử lý không bị gián đoạn do thời gian chờ PHP, đồng thời cho phép người dùng nhận phản hồi về tiến trình của các hoạt động đang diễn ra.

17
kiamlaluno

Cách này để tiêu diệt các nút rất chậm, nhưng an toàn nhất

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");
}

Đối với người dùng, bạn có thể lập trình xác định người dùng mà bạn muốn xóa không? Nếu có thể, bạn có thể sử dụng chức năng trước đó làm ví dụ để loại bỏ người dùng chưa được xử lý.

3
dobeerman

Thay vì tạo một mô-đun tùy chỉnh cho tác vụ này, bạn có thể sử dụng tập lệnh đơn giản và thực hiện nó với Drush . Vì bạn cần xử lý nhiều người dùng và nút, nên sử dụng API Batch (và nó có thể được sử dụng với Drush ).

3
Pierre Buyle

Nếu, giống như tôi, bạn thích cách tiếp cận Python (hiếm khi ở đây có lẽ, nhưng vẫn vậy), đây là cách minh bạch và hiệu quả để khắc phục vấn đề này:

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'

Các bước cơ bản là:

  1. Đăng nhập vào DB của bạn bằng drush sql-cli -r $your-path-to-drupal -l $your-site-url
  2. Chạy SQL ở trên với điều kiện của riêng bạn và dán kết quả vào biến người dùng.
  3. Cập nhật drupal đường dẫn và tên trang web của bạn vào lệnh drush
  4. Chạy tập lệnh với python delete-users.py

Tôi chắc chắn có một cách tốt hơn để làm điều này, nhưng đây là giải pháp hack của tôi hoạt động tốt.

2
mlissner

Sử dụng người dùng nâng cao mô-đun. Mô-đun này thêm tab "nâng cao" vào trang quản lý người dùng. Trong tab đó, bạn có thể lọc người dùng theo bất kỳ thuộc tính nào (vai trò, trạng thái, v.v.) và chọn tất cả. Nếu bạn chọn phương thức xóa của người dùng là xóa người dùng và xóa tất cả nội dung, bạn cũng có thể xóa tất cả nội dung do họ tạo.

1
Sinan Erdem

Tôi đã triển khai một mô-đun tùy chỉnh để xóa tất cả người dùng một cách gián đoạn 7. Trong khu vực quản trị/người có một hình thức mới để hoàn thành thao tác này.

Quá với drush.

Là một dự án hộp cát. Thk.

Liên kết đến dự án.

1
lgrtm

Hãy thử 2 mô-đun này cho D6:

Người dùng Prune https://drupal.org/project/user_Prune và Xóa người dùng https://drupal.org/project/user_delete

User Prune cho phép bạn xóa hàng loạt người dùng không hoạt động dựa trên các tiêu chí bạn chỉ định.

Xóa người dùng cho phép bạn xóa người dùng và xóa tất cả nội dung đã gửi bao gồm các nút và nhận xét

1
FreeScholar

Mô-đun Xóa tất cả có thể có ích.

Sau khi cài đặt, bạn có thể làm, ví dụ:

drush delete-all articles

hoặc là

drush delete-all users

Phiên bản Drupal 6 trong dev nhưng từ ghi chú:

Tất cả mọi thứ nên được làm việc ngoại trừ để xóa nhanh chóng.

0
Mauro Sardu