Zastanawiam się tylko, czy Drush jest w stanie usunąć węzły danego typu treści.
Coś jak: $ drush delete-node --type=MyContentType
Jeśli nie jest to możliwe, czy mogę stworzyć taką metodę ?
Możesz utworzyć następującą funkcję:
function MYMODULE_delete_all_the_things() {
$query = new EntityFieldQuery;
$result = $query->entityCondition('entity_type', 'node')
->propertyCondition('type', 'YOUR-CONTENT-TYPE')
->execute();
if (isset($result['node']) && count($result['node'])) {
$node_ids = array_keys($result['node']);
node_delete_multiple($node_ids);
}
}
Uwaga - można również użyć prostego SELECT
zapytania, ale biorąc pod uwagę, że pracując z jednostkami, wydaje się bardziej rozsądne / powszechna praktyka używać EntityFieldQuery .
Powinno to być również dość łatwe do zmiany lub dodania argumentów. Możesz również dość łatwo umieścić go w komendzie Drush - w repozytorium Drush znajduje się przykład, jak to zrobić (sprawdź sekcję Polecenia u dołu).
Zainstaluj moduł devel i użyj drush, aby usunąć wszystkie węzły,
Możesz także podać opcję typu,
źródło
devel_generate
Moduł jest dołączony devel, ale musi być włączony zdrush en devel_generate
Genc jest zwykle używany do tworzenia węzłów, więc 0 0 na końcu mówi jej, aby nie tworzyć coś nowego, a --kill usunąć, co już istnieje.Chyba możesz to zrobić za pomocą poniższego polecenia
EDYCJA: Znaleziono moduł, który robi coś / związany z pytaniem
http://drupal.org/project/delete_all
Stosowanie
Drush
drush delete-all
Przykład:
drush delete-all article
źródło
delete_all
Nie jest jeszcze przeniesiony na Drupal 8 , ale odpowiedź genc działa.Drush 9
drush entity:delete node --bundle=my_content_type
źródło
Coś takiego działałoby (nieprzetestowane):
Znajduje to wszystkie węzły, których typ zawartości
Annoucements
używaEntityFieldQuery()
. Następnie pobiera wszystkie$nids
wyniki i usuwa je za pomocąnode_delete_multiple()
.Możesz wziąć ten kod, umieścić go w osobnym pliku PHP, a następnie wykonać za pomocą
drush scr
.Korzystanie z interfejsu API zapewni, że wszystkie właściwe haki zostaną uruchomione. Będą również usuwać wersje węzłów i dane pól (i ich wersje), aby nie mieć osieroconych danych w bazie danych.
źródło
W tym wątku jest kilka dobrych pomysłów. Jeśli nie chcesz naprawdę programować i chcesz użyć Drusha, możesz zajrzeć do modułu Usuń wszystko :
źródło
VBO ma integrację z Drush. Utwórz widok VBO węzłów, uruchom go za pomocą Drusha (używając
drush vbo-execute
), podaj typ węzła jako argument.źródło
Możesz także utworzyć skrypt drusha (powiedzmy, że nazywa się „bulk_delete.php” i znajduje się w folderze głównym Drupal):
Jest to absolutnie najszybszy sposób na zrobienie tego: bezpośrednie zapytanie do bazy danych za pomocą funkcji Drupala db_delete
Stosowanie:
Dokument: https://api.drupal.org/api/drupal/include!database!database.inc/function/db_delete/7
Ostrzeżenie: ten proces nie usuwa danych z ich pól. W każdym razie ten sam proces można zastosować do tych pól (patrząc na kolumnę „pakiet” każdego pola). Na przykład:
Gdzie „typ mikrokontraktowy” to ten użyty w pierwszym zapytaniu.
źródło
'nid' > 5000
?Drupal 7
Wypróbuj następujący jednowierszowy program, usuwa wszystkie węzły MyContentType z Drupal:
Lub możesz usunąć wszystkie jednostki na podstawie nazwy typu jednostki (np. Węzeł):
Uwaga:
node
to nazwa typu twojej jednostki, możesz ją zmienić w razie potrzeby.Jeśli wystąpią błędy pamięci lub przekroczenia limitu czasu, możesz dodać następujące zestawy tuż przed
$res
:źródło
Aby usunąć wszystkie węzły określonego typu treści, możesz spróbować uruchomić następujące polecenie za pomocą drush:
Gdzie MyContentType to nazwa typu zawartości Twojego komputera (np. Strona).
źródło
Dla poszczególnych węzłów:
źródło
Aktualizacja odpowiedzi udzielonej przez @kenorb.
W Drupal 8
źródło
Możesz użyć
drush node_delete NID
aby usunąć konkretny węzeł, ale jeśli chcesz usunąć wszystkie węzły według typu zawartości, myślę, że możesz utworzyć wtyczkę drush za pomocą interfejsu wsadowego.źródło
Możesz to również zrobić za pomocą modułu devel, na który odpowiedziano w Czy mogę usunąć węzły danego typu zawartości za pomocą Drush?
Zainstaluj moduł devel i użyj drush, aby usunąć wszystkie węzły,
$ drush genc - zabij 0 0
Możesz także podać opcję typu,
$ drush genc --kill --types = artykuł 0 0
źródło