it-swarm-eu.dev

Jak odstranit všechny uzly daného typu obsahu?

Mám několik tisíc uzlů určitého typu obsahu. Pomocí webového rozhraní (example.com/admin/content) mohu smazat najednou pouze asi 50. Jak je mohu rychle smazat?

31
Greg

K tomu existuje modul (TM).

Viz Hromadné odstranění .

Tím se pomocí Batch API odstraní uzly, aby se předešlo problémům s vypršením časového limitu nebo paměti při mazání tisíců uzlů jediným hovorem na node_delete_multiple ().

Hromadné odstranění je opuštěný modul. Podívejte se na alternativy:

32
Berdir

Inspirací pro modul Devel Generate je zde funkce „zabíjení obsahu“:

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))));
  }
}

Takže bych zkusil buď použít Devel Generate pro smazání všech uzlů, ale nevytvořit žádné nové, nebo použít example.com/devel/php k přímému volání devel_generate_content_kill(array('node_types' => array('my_node_type')));.

25
tim.plunkett

V Drupal 8 je jedním způsobem použití metody entityQuery () s metodou 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);

Pokud potřebujete použít jiné filtry/podmínky, můžete zkontrolovat stránku QueryInterface rozhraní

[~ # ~] editovat [~ # ~] (Jinak díky @ 4k4) ):

$storage_handler = \Drupal::entityTypeManager()->getStorage("node");
$entities = $storage_handler->loadByProperties(["type" => "YOUR_CONTENT_TYPE_NAME"]);
$storage_handler->delete($entities);

Pokud chcete testovat kód, můžete použít:

drush php-eval '$storage_handler = \Drupal::entityTypeManager()->getStorage("node"); $entities = $storage_handler->loadByProperties(["type" => "article"]); $storage_handler->delete($entities);'

Tím se odstraní všechny vaše články.

17

Pokud to chcete udělat čistě pomocí uživatelského rozhraní, můžete použít modul devel_generate.

  1. V nabídce „Konfigurace“ přejděte do nabídky „Generovat obsah“ (admin/config/vývoj/generovat/obsah).
  2. Vyberte typy obsahu, které chcete odstranit.
  3. Před generováním nového obsahu se ujistěte, že je zaškrtnuto políčko „Smazat veškerý obsah v těchto typech obsahu“.
  4. Nastavte počet uzlů, které chcete vygenerovat, na „0“.

Tímto způsobem nebudou generovány žádné uzly a budou odstraněny všechny uzly vybraných typů.

13
areynolds

Můžete to udělat v Drupal 7 pomocí Execute PHP kódová část modulu Devel) zadáním:

$result= db_query("SELECT nid FROM {node} AS n WHERE n.type = 'TYPE'");
foreach ($result as $record) {
  node_delete($record->nid);
}
10
Colin Shipton

Vytvořte soubor s níže uvedeným kódem v kořenovém adresáři instalace drupal) a soubor spusťte.

<?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);
  }
?>
10
Satya

Udělejte to v terminálu, pokud používáte Drush a modul smazat vše :

 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
6
shrish

Hromadné operace zobrazení poskytují administrátorskou obrazovku s konfigurovatelným uzlem BatchAPI, která umožňuje filtrování podle typu, výběr všech uzlů, které odpovídají vašim kritériím vyhledávání atd.

To je moje hands-down řešení v Drupal 6 - 6) - kromě hromadného mazání můžete hromadně editovat uzly a dělat spoustu dalších věcí.

Vypadá to, že verze Drupal 7 ještě není připravena - ale já bych sledoval tento modul pro vydání D7.

5
Darren Petersen

S modulem Devel pomocí drush:

drush genc 0 --types=article --kill

Nebo v uživatelském rozhraní, jak je vysvětleno zde: http://befused.com/drupal/delete-nodes-devel

4
sunzu

Další úryvek je:

$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); 
} 

kde TO_BE_DELETED je typ obsahu, který má být odstraněn.

4
Tangurena

Používám modul Smazat vše , funguje to dobře s D8 a poskytuje velmi užitečné příkazy drush. Chcete-li například odstranit veškerý obsah typu obsahu article:

drush delete-all article  
3
gerzenstl

Můžete vyzkoušet modul Smazat vše , přejděte na 'admin/content/delete_content' a zobrazí se formulář pro odstranění obsahu patřícího určitým typům obsahu.

Pozdravy

1
O V

Tento modul se používá k odstranění veškerého obsahu a/nebo uživatelů z webu. Jedná se hlavně o vývojářský nástroj, který se může hodit v několika případech

https://www.drupal.org/project/delete_all

stejně jako modul Hromadné odstranění odstraní všechny uzly určitého typu uzlů pomocí dávkového api. Pro malý počet uzlů se doporučuje použít modul VBO (Views Batch Operations). Pokud však musíte smazat 10 000 uzlů, může být tento modul lepší volbou.

https://www.drupal.org/project/bulkdelete

0
onlink

Pokud máte aktivovaný modul Migrace, můžete použít:

$ drush migrate-wipe <content-type>

Viz Typické příkazy migrace pomocí Drush .

0
jiv-e

Programově odstranit všechny uzly typu obsahu. Zde je pomocná funkce:


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.'));
  }
}
0
berramou