it-swarm-vi.com

Làm thế nào để xóa tất cả các nút của một loại nội dung nhất định?

Tôi có vài nghìn nút của một loại nội dung cụ thể. Sử dụng giao diện web (example.com/admin/content), tôi chỉ có thể xóa khoảng 50 lần. Làm thế nào tôi có thể nhanh chóng xóa chúng?

33
Greg

Có một mô-đun cho điều đó (TM).

Xem Xóa hàng loạt .

Điều đó sẽ sử dụng API Batch để xóa các nút để tránh các vấn đề về thời gian chờ hoặc bộ nhớ khi xóa hàng ngàn nút với một lệnh gọi đến node_delete_mult Môn ().

Xóa hàng loạt là một mô-đun bị bỏ rơi. Xem để thay thế:

33
Berdir

Nhìn vào mô-đun Tạo Devel để lấy cảm hứng, đây là chức năng "giết nội dung" của nó devel_generate_content_kill :

function devel_generate_content_kill($values) {
  $results = db_select('node', 'n')
              ->fields('n', array('nid'))
              ->condition('type', $values['node_types'], 'IN')
              ->execute();
  foreach ($results as $result) {
    $nids[] = $result->nid;
  }

  if (!empty($nids)) {
    node_delete_multiple($nids);
    drupal_set_message(t('Deleted %count nodes.', array('%count' => count($nids))));
  }
}

Vì vậy, tôi sẽ thử sử dụng Devel Generate để xóa tất cả các nút nhưng không tạo nút mới hoặc sử dụng example.com/devel/php để gọi trực tiếp devel_generate_content_kill(array('node_types' => array('my_node_type')));.

27
tim.plunkett

Trong Drupal 8 một cách là sử dụng phương thức entityQuery () với phương thức EntityStorageInterface :: xóa () :

$result = \Drupal::entityQuery("node")
    ->condition("type", "YOUR_CONTENT_TYPE_NAME")
    // If the update is being executed via drush entityQuery will only
    // return the content uid 0 have access to. To return all set
    // accessCheck to false since it defaults to TRUE. 
    ->accessCheck(FALSE)
    ->execute();

$storage_handler = \Drupal::entityTypeManager()->getStorage("node");
$entities = $storage_handler->loadMultiple($result);
$storage_handler->delete($entities);

Nếu bạn cần áp dụng các bộ lọc/điều kiện khác, bạn có thể kiểm tra trang giao diện QueryInterface

[~ # ~] chỉnh sửa [~ # ~] (Cách khác, cảm ơn @ 4k4 ):

$storage_handler = \Drupal::entityTypeManager()->getStorage("node");
$entities = $storage_handler->loadByProperties(["type" => "YOUR_CONTENT_TYPE_NAME"]);
$storage_handler->delete($entities);

Nếu bạn muốn kiểm tra mã bạn có thể sử dụng:

drush php-eval '$storage_handler = \Drupal::entityTypeManager()->getStorage("node"); $entities = $storage_handler->loadByProperties(["type" => "article"]); $storage_handler->delete($entities);'

Điều này sẽ xóa tất cả các bài viết của bạn.

19
Adrian Cid Almaguer

Nếu bạn muốn thực hiện nó hoàn toàn thông qua UI, bạn có thể sử dụng mô-đun devel_generate.

  1. Điều hướng đến menu "Tạo nội dung" trong "Cấu hình" (admin/config/Development/created/content).
  2. Chọn loại nội dung bạn muốn xóa.
  3. Đảm bảo hộp kiểm bên cạnh "Xóa tất cả nội dung trong các loại nội dung này trước khi tạo nội dung mới" được chọn.
  4. Đặt số lượng nút bạn muốn tạo thành "0".

Bằng cách này, không có nút nào được tạo và tất cả các nút của các loại đã chọn sẽ bị xóa.

13
areynolds

Bạn có thể thực hiện việc này trong Drupal 7 bằng cách sử dụng Execute PHP Mã phần của mô-đun Devel bằng cách nhập:

$result= db_query("SELECT nid FROM {node} AS n WHERE n.type = 'TYPE'");
foreach ($result as $record) {
  node_delete($record->nid);
}
10
Colin Shipton

Tạo một tệp có mã bên dưới trong root của drupal cài đặt và thực thi tệp.

<?php
  require_once './includes/bootstrap.inc';
  drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

  $aquery= db_query("SELECT nid FROM {node} AS n WHERE n.type = 'company'");
  while ($row = db_fetch_object($aquery)) {
    node_delete($row->nid);
  }
?>
10
Satya

Thực hiện việc này trong thiết bị đầu cuối, nếu bạn sử dụng mô-đun Drush và xóa tất cả :

 drush delete-all [content-type-machine-name]


Examples:
 drush delete-all article             Delect all article nodes.
 drush delete-all all                 Delete nodes of all types.
 drush delete-all --reset             Delete nodes of all types, and reset node, revision and comment counters.
 drush delete-all users               Delete users.

Options:
 --reset                              Reset counter for node, revision and comment tables.
 --roles                              pick roles
8
shrish

Lượt xem Hoạt động hàng loạt cung cấp màn hình quản trị nút có thể định cấu hình BatchAPI, cho phép lọc theo loại, lựa chọn tất cả các nút phù hợp với tiêu chí tìm kiếm của bạn, v.v.

Đó là giải pháp xử lý của tôi trong Drupal 6 - ngoài việc xóa hàng loạt, bạn có thể chỉnh sửa hàng loạt các nút và thực hiện một loạt các công cụ khác.

Có vẻ như phiên bản Drupal 7 chưa sẵn sàng - nhưng tôi đang xem mô-đun đó để phát hành D7.

5
Darren Petersen

Với mô-đun Devel, sử dụng drush:

drush genc 0 --types=article --kill

Hoặc trong UI như được giải thích ở đây: http://befuse.com/drupal/delete-nodes-devel

4
sunzu

Một đoạn khác là:

$query = db_query("SELECT n.nid FROM {node} n WHERE n.type = 'TO_BE_DELETED'"); 
while ($n = db_fetch_object($query)) 
{
     node_delete($n->nid); 
} 

ở đâu TO_BE_DELETED là loại nội dung sẽ bị xóa.

4
Tangurena

Tôi sử dụng Xóa tất cả mô-đun, nó hoạt động tốt với D8 và cung cấp các lệnh drush rất hữu ích. Ví dụ: để xóa tất cả nội dung của loại nội dung article:

drush delete-all article  
3
gerzenstl

Bạn có thể thử Xóa tất cả mô-đun, điều hướng đến 'admin/content/xóa_content' và bạn sẽ được cung cấp một biểu mẫu để xóa nội dung thuộc một số loại nội dung nhất định.

Trân trọng

1
Oleg Videnov

Mô-đun này được sử dụng để xóa tất cả nội dung và/hoặc người dùng khỏi một trang web. Đây chủ yếu là một công cụ dành cho nhà phát triển, có thể có ích trong một số trường hợp

https://www.drupal.org/project/delete_all

như mô-đun Xóa hàng loạt sẽ xóa bất kỳ nút nào của một loại nút nhất định bằng cách sử dụng lô api. Bạn nên sử dụng mô-đun Operations Batch Operations (VBO) cho một số lượng nhỏ các nút. Nhưng nếu bạn phải xóa 10.000 nút, mô-đun này có thể là một lựa chọn tốt hơn.

https://www.drupal.org/project/bulkdelete

0
onlink

Nếu bạn đã bật mô-đun Di chuyển, bạn có thể sử dụng:

$ drush migrate-wipe <content-type>

Xem Các lệnh di chuyển điển hình bằng Drush .

0
jiv-e

Xóa tất cả các nút của loại nội dung theo chương trình ở đây là một hàm trợ giúp:

[.__.] 
function _delete_all_nodes_of_type($type = '') {
  // Return all nids of nodes of type.
  $nids = db_select('node', 'n')
    ->fields('n', array('nid'))
    ->condition('n.type', $type)
    ->execute()
    ->fetchCol(); // returns an indexed array
  if (!empty($nids)) {
    node_delete_multiple($nids);
    drupal_set_message(format_plural(count($nids), count($nids) . ' node Deleted.', count($nids) . ' nodes Deleted.'));
  }
}
 [.__.]
0
berramou