Câu trả lời:
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ế:
Nhìn vào mô-đun Devel Generate để 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 devel_generate_content_kill(array('node_types' => array('my_node_type')));
trực tiếp.
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
EDIT (Cách khác, nhờ @ 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.
$entities = $storage_handler->loadByProperties(['type' => 'YOUR_CONTENT_TYPE_NAME']);
entityQuery
bạn nên đặt accessCheck
câu lệnh trên. Mặt khác, nếu bạn chạy nó trong drush, theo mặc định accessCheck được đặt thành true và bất kỳ nút nào mà uid 0 không có quyền truy cập sẽ không được trả về.
Nếu bạn muốn thực hiện nó hoàn toàn thông qua giao diện người dùng, bạn có thể sử dụng mô-đun devel_generate.
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.
Tạo một tệp với mã dưới đây trong root của cài đặt drupal 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);
}
?>
Bạn có thể thực hiện điều này trong Drupal 7 bằng cách sử dụng phần Mã PHP thực thi 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);
}
Làm điều này trong thiết bị đầu cuối, nếu bạn sử dụng Drush và xóa tất cả các mô-đun:
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
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 tuyệt vời 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.
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);
}
nơi TO_BE_DELETED
là loại nội dung bị xóa.
db_delete('node')
Với mô-đun Devel, sử dụng drush:
drush genc 0 --types=article --kill
Hoặc trong giao diện người dùng như được giải thích tại đây: http://befuse.com/drupal/delete-nodes-devel
devel_generate
cần được kích hoạt. Và đối với nhiều loại, đó làdrush genc 0 --kill --types="article, page"
Tôi sử dụng Xóa tất cả cá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 article
loại nội dung:
drush delete-all article
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 về một số loại nội dung nhất định.
Trân trọng
Nếu bạn đã bật mô-đun Di chuyển, bạn có thể sử dụng:
$ drush migrate-wipe <content-type>
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.
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.'));
}
}
Tôi đã kết thúc bằng db_delete , không yêu cầu mô-đun:
<?php
db_delete('node')
->condition('type', 'MY_CONTENT_TYPE')
->execute();
?>
Chỉnh sửa / Cảnh báo: Xem bình luận của Berdir bên dưới. Phương pháp này không dọn sạch tất cả dữ liệu liên quan đến các nút.
Nếu bạn không muốn mã hóa, e có thể thử mô-đun này, https://drupal.org/project/total_control
Chỉ cần truy cập Bảng điều khiển -> Nội dung, chọn tất cả nội dung (bạn có thể lọc theo loại nội dung), sau đó chọn "Xóa mục"