Odpowiedzi:
Jest na to moduł (TM).
Zobacz Usuwanie zbiorcze .
Spowoduje to użycie interfejsu API usługi Batch do usunięcia węzłów, aby uniknąć problemów z przekroczeniem limitu czasu lub pamięci podczas usuwania tysięcy węzłów za pomocą jednego wywołania metody node_delete_multiple ().
Usuwanie zbiorcze to opuszczony moduł. Zobacz alternatywy:
Patrząc na moduł Devel Generate w poszukiwaniu inspiracji, oto jego funkcja „zabijania zawartości” 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)))); } }
Więc spróbowałbym albo użyć Devel Generate, aby usunąć wszystkie węzły, ale nie utworzyć nowych, lub użyć example.com/devel/php, aby zadzwonić devel_generate_content_kill(array('node_types' => array('my_node_type')));
bezpośrednio.
W Drupal 8 jednym ze sposobów jest użycie metody entityQuery () z metodą 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);
Jeśli chcesz zastosować inne filtry / warunki, możesz sprawdzić stronę interfejsu QueryInterface
EDYCJA (w inny sposób, dzięki @ 4k4 ):
$storage_handler = \Drupal::entityTypeManager()->getStorage("node");
$entities = $storage_handler->loadByProperties(["type" => "YOUR_CONTENT_TYPE_NAME"]);
$storage_handler->delete($entities);
Jeśli chcesz przetestować kod, możesz użyć:
drush php-eval '$storage_handler = \Drupal::entityTypeManager()->getStorage("node"); $entities = $storage_handler->loadByProperties(["type" => "article"]); $storage_handler->delete($entities);'
Spowoduje to usunięcie wszystkich artykułów.
$entities = $storage_handler->loadByProperties(['type' => 'YOUR_CONTENT_TYPE_NAME']);
entityQuery
, powinieneś ustawić accessCheck
na wyciągu. W przeciwnym razie, jeśli uruchomisz go w trybie Drush, domyślnie accessCheck jest ustawiony na true, a wszystkie węzły, do których UID 0 nie ma dostępu, nie zostaną zwrócone.
Jeśli chcesz to zrobić wyłącznie za pomocą interfejsu użytkownika, możesz użyć modułu devel_generate.
W ten sposób nie zostaną wygenerowane żadne węzły, a wszystkie węzły wybranych typów zostaną usunięte.
Utwórz plik z poniższym kodem w katalogu głównym instalacji drupal i uruchom plik.
<?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);
}
?>
Możesz to zrobić w Drupal 7 za pomocą części Wykonaj kod PHP modułu Devel, wprowadzając:
$result= db_query("SELECT nid FROM {node} AS n WHERE n.type = 'TYPE'");
foreach ($result as $record) {
node_delete($record->nid);
}
Zrób to w terminalu, jeśli używasz Drush i usuń wszystkie moduły:
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
Widoki Operacje masowe udostępniają konfigurowalny ekran administratora węzła z funkcją BatchAPI, który umożliwia filtrowanie według typu, wybór wszystkich węzłów pasujących do kryteriów wyszukiwania itp.
To moje praktyczne rozwiązanie w Drupal 6 - oprócz usuwania wsadowego możesz edytować zbiorczo węzły i robić wiele innych rzeczy.
Wygląda na to, że wersja Drupal 7 nie jest jeszcze gotowa - ale oglądałbym ten moduł dla wydania D7.
Kolejny fragment to:
$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);
}
gdzie TO_BE_DELETED
jest typ zawartości do usunięcia.
db_delete('node')
Z modułem Devel, używając drush:
drush genc 0 --types=article --kill
Lub w interfejsie użytkownika, jak wyjaśniono tutaj: http://befused.com/drupal/delete-nodes-devel
devel_generate
, który należy włączyć. A dla wielu typów todrush genc 0 --kill --types="article, page"
Używam Usuń cały moduł, działa dobrze z D8 i zapewnia bardzo przydatne polecenia drush. Na przykład, aby usunąć całą article
zawartość typu zawartości:
drush delete-all article
Możesz spróbować usunąć wszystko moduły, przejść do „admin / content / delete_content”, a pojawi się formularz usuwania treści należących do niektórych typów treści.
pozdrowienia
Jeśli masz włączony moduł migracji, możesz użyć:
$ drush migrate-wipe <content-type>
Ten moduł służy do usuwania całej zawartości i / lub użytkowników z witryny. Jest to głównie narzędzie programistyczne, które może się przydać w kilku przypadkach
https://www.drupal.org/project/delete_all
podobnie jak moduł Usuwanie zbiorcze usunie wszystkie węzły określonego typu węzła za pomocą interfejsu API wsadowego. Zaleca się używanie modułu Views Batch Operations (VBO) dla niewielkiej liczby węzłów. Ale jeśli musisz usunąć 10.000 węzłów, ten moduł może być lepszą opcją.
Programowo usuń wszystkie węzły typu zawartości tutaj jest funkcja pomocnika:
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.'));
}
}
Skończyło się na użyciu db_delete , nie wymaga modułów:
<?php
db_delete('node')
->condition('type', 'MY_CONTENT_TYPE')
->execute();
?>
Edytuj / Ostrzeżenie: Zobacz komentarz Berdira poniżej. Ta metoda nie usuwa wszystkich danych związanych z węzłami.
Jeśli nie chcesz kodować, możesz wypróbować ten moduł, https://drupal.org/project/total_control
Przejdź do Pulpitu nawigacyjnego -> Treść, zaznacz całą zawartość (możesz filtrować według typu zawartości), a następnie wybierz „Usuń element”