Ответы:
Для этого есть модуль (ТМ).
См. Массовое удаление .
При этом будет использоваться пакетный 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 одним из способов является использование метода entityQuery () с методом 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
РЕДАКТИРОВАТЬ (Другой способ, благодаря @ 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
в заявлении. В противном случае, если вы запустите его в drush, по умолчанию 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, используя часть Execute PHP Code модуля Devel, введя:
$result= db_query("SELECT nid FROM {node} AS n WHERE n.type = 'TYPE'");
foreach ($result as $record) {
node_delete($record->nid);
}
Сделайте это в терминале, если вы используете Drush и модуль delete all :
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:
drush genc 0 --types=article --kill
Или в пользовательском интерфейсе, как описано здесь: http://befused.com/drupal/delete-nodes-devel
devel_generate
который нужно включить. И для нескольких типов этоdrush genc 0 --kill --types="article, page"
Я использую модуль « Удалить все », он отлично работает с D8 и предоставляет очень полезные команды drush. Например, чтобы удалить все содержимое типа article
содержимого:
drush delete-all article
Вы можете попробовать удалить все модули, перейти к «admin / content / delete_content», и вам будет представлена форма для удаления контента, принадлежащего к определенным типам контента.
С уважением
Если у вас включен модуль миграции, вы можете использовать:
$ drush migrate-wipe <content-type>
Этот модуль используется для удаления всего контента и / или пользователей с сайта. Это в основном инструмент разработчика, который может пригодиться в нескольких случаях
https://www.drupal.org/project/delete_all
так же как и модуль Bulk Delete, удалит все узлы определенного типа, используя пакетный 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
Просто зайдите в Dashboard -> Content, выберите весь контент (вы можете фильтровать по типу контента), затем выберите «Delete item»