Відповіді:
Для цього є модуль (TM).
Див. Групове видалення .
Це використовує пакетний API для видалення вузлів, щоб уникнути затримки часу або пам’яті при видаленні тисяч вузлів одним викликом node_delete_multiple ().
Масове видалення - це покинутий модуль. Подивіться альтернативи:
Дивлячись на модуль Devel Generate для натхнення, ось його функція "вбити вміст" 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)))); } }
Тому я б спробував або використовувати Devel Generate для видалення всіх вузлів, але не створювати нових, або використовувати example.com/devel/php для виклику devel_generate_content_kill(array('node_types' => array('my_node_type')));
безпосередньо.
У Drupal 8 одним із способів є використання методу entitQuery () за допомогою методу EntityStorageInterface :: delete () :
$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);
Якщо вам потрібно застосувати інші фільтри / умови, ви можете перевірити сторінку інтерфейсу QueryInterface
EDIT (Інший спосіб, завдяки @ 4k4 ):
$storage_handler = \Drupal::entityTypeManager()->getStorage("node");
$entities = $storage_handler->loadByProperties(["type" => "YOUR_CONTENT_TYPE_NAME"]);
$storage_handler->delete($entities);
Якщо ви хочете перевірити код, ви можете використовувати:
drush php-eval '$storage_handler = \Drupal::entityTypeManager()->getStorage("node"); $entities = $storage_handler->loadByProperties(["type" => "article"]); $storage_handler->delete($entities);'
Це видалить усі ваші статті.
$entities = $storage_handler->loadByProperties(['type' => 'YOUR_CONTENT_TYPE_NAME']);
entityQuery
ви повинні встановити accessCheck
оператор on. В іншому випадку, якщо ви запускаєте його в друку, за замовчуванням accessCheck встановлено значення true і всі вузли, до яких uid 0 не має доступу, не будуть повернуті.
Якщо ви хочете зробити це виключно через інтерфейс користувача, ви можете використовувати модуль devel_generate.
Таким чином, не буде створено жодних вузлів, а всі вузли вибраних типів буде видалено.
Створіть файл із кодом нижче в корені інсталяції drupal та виконайте його.
<?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);
}
?>
Це можна зробити в Drupal 7, використовуючи частину модуля Devel Execute PHP Code, ввівши:
$result= db_query("SELECT nid FROM {node} AS n WHERE n.type = 'TYPE'");
foreach ($result as $record) {
node_delete($record->nid);
}
Зробіть це в терміналі, якщо ви використовуєте Drush та видаліть весь модуль:
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
Перегляд "Масових" операцій забезпечує екран з адмініструванням вузла BatchAPI з можливістю фільтрування за типом, вибір усіх вузлів, що відповідають вашим критеріям пошуку тощо.
Це моє рішення в друкарському режимі в Drupal 6 - окрім пакетного видалення, ви можете групово редагувати вузли та виконувати купу інших матеріалів.
Схоже, версія Drupal 7 ще не готова - але я б дивився цей модуль на випуск D7.
Ще один фрагмент:
$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);
}
де TO_BE_DELETED
тип вмісту, який потрібно видалити
db_delete('node')
За допомогою модуля Devel за допомогою барабану:
drush genc 0 --types=article --kill
Або в інтерфейсі користувача, як пояснено тут: http://befused.com/drupal/delete-nodes-devel
devel_generate
який потрібно активувати. А для декількох типів цеdrush genc 0 --kill --types="article, page"
Я використовую Видалити всі модулі, він прекрасно працює з D8 і забезпечує дуже корисні команди ударних. Наприклад, щоб видалити весь вміст типу article
вмісту:
drush delete-all article
Ви можете спробувати Видалити весь модуль, перейдіть до 'admin / content / delete_content', і вам буде представлена форма для видалення вмісту, що належить певним типам контенту.
З повагою
Якщо у вас включений модуль «Міграція», ви можете використовувати:
$ drush migrate-wipe <content-type>
Цей модуль використовується для видалення всього вмісту та / або користувачів із сайту. Це в основному інструмент для розробників, який може стати в нагоді в декількох випадках
https://www.drupal.org/project/delete_all
як і модуль групового видалення видалить будь-які вузли певного типу вузла за допомогою пакетного api. Для невеликої кількості вузлів рекомендується використовувати модуль Views Batch Operations (VBO). Але якщо вам доведеться видалити 10 000 вузлів, цей модуль може бути кращим варіантом.
Програмно видаляйте всі вузли типу вмісту. Тут є допоміжна функція:
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.'));
}
}
Я закінчив використовувати db_delete , не потрібні модулі:
<?php
db_delete('node')
->condition('type', 'MY_CONTENT_TYPE')
->execute();
?>
Редагування / попередження: Дивіться коментар Бердіра нижче. Цей метод не очищує всі дані, пов'язані з вузлами.
Якщо ви не хочете кодувати, ви можете спробувати цей модуль, https://drupal.org/project/total_control
Просто перейдіть на Інформаційну панель -> Вміст, виберіть увесь вміст (ви можете фільтрувати за типом вмісту), а потім виберіть "Видалити елемент"