web-gelistirme-sc.com

Belirli bir içerik türünün tüm düğümleri nasıl silinir?

Belirli bir içerik türünde birkaç bin düğümüm var. Web arayüzünü (example.com/admin/content) kullanarak bir seferde yalnızca yaklaşık 50 tane silebilirim. Bunları nasıl hızlı bir şekilde silebilirim?

33
Greg

Bunun için bir modül var (TM).

Bakınız Toplu Silme .

Bu, tek düğüm node_delete_multiple () çağrısıyla binlerce düğümü silerken zaman aşımı veya bellek sorunlarından kaçınmak için düğümleri silmek için Toplu API'yı kullanacaktır.

Toplu Silme, terk edilmiş bir modüldür. Alternatifler için bakınız:

33
Berdir

İlham almak için Devel Generate modülüne baktığımızda, "içerik öldürme" işlevi 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))));
  }
}

Bu yüzden ya tüm düğümleri silmek için Devel Generate kullanmayı ya da yenilerini oluşturmayı ya da doğrudan devel_generate_content_kill(array('node_types' => array('my_node_type')));'i çağırmak için example.com/devel/php'yi kullanmayı denerdim.

27
tim.plunkett

Drupal 8'de entityQuery () yöntemini EntityStorageInterface :: delete () yöntem:

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

Başka filtreler/koşullar uygulamanız gerekiyorsa QueryInterface arayüz sayfasını kontrol edebilirsiniz.

[~ # ~] düzenleme [~ # ~] (Aksi halde, '4k4 ):

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

Kodu test etmek isterseniz şunları kullanabilirsiniz:

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

Bu işlem tüm makalelerinizi silecektir.

19

Bunu yalnızca kullanıcı arayüzü üzerinden yapmak istiyorsanız devel_generate modülünü kullanabilirsiniz.

  1. "Yapılandırma" (yönetici/yapılandırma/geliştirme/oluşturma/içerik) içindeki "İçerik Oluştur" menüsüne gidin.
  2. Silmek istediğiniz içerik türlerini seçin.
  3. "Yeni içerik oluşturmadan önce bu içerik türlerindeki tüm içeriği sil" seçeneğinin yanındaki onay kutusunun işaretli olduğundan emin olun.
  4. Oluşturmak istediğiniz düğüm sayısını "0" olarak ayarlayın.

Bu şekilde düğüm oluşturulmaz ve seçilen türlerin tüm düğümleri silinir.

13
areynolds

Bunu şunu girerek yapabilirsiniz Drupal 7 Devel modülünün Execute PHP Kod bölümünü kullanarak:

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

drupal kurulumunun kök dizininde aşağıdaki kodla bir dosya oluşturun ve dosyayı yürütün).

<?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

Drush ve tümünü sil modülünü kullanıyorsanız terminalde bunu yapın:

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

Görünümler Toplu işlemler, türe göre filtrelemeye, arama ölçütlerinize uyan tüm düğümlerin seçimine vb. Olanak sağlayan BatchAPI etkin, yapılandırılabilir bir düğüm yönetici ekranı sağlar.

Bu benim = Drupal 6 - ellerimi çözümüm - toplu silme dışında, düğümleri toplu olarak düzenleyebilir ve bir sürü başka şey yapabilirsiniz.

Görünüşe göre Drupal 7 sürümü henüz hazır değil - ama bu modülü D7 sürümü için izliyorum.

5
Darren Petersen

Devel modülü ile, drush kullanarak:

drush genc 0 --types=article --kill

Veya burada açıklandığı gibi kullanıcı arayüzünde: http://befused.com/drupal/delete-nodes-devel

4
sunzu

Başka bir pasaj:

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

nerede TO_BE_DELETED silinecek içerik türüdür.

4
Tangurena

Tümünü sil modülünü kullanıyorum, D8 ile iyi çalışıyor ve çok kullanışlı drush komutları sağlıyor. Örneğin, article içerik türünün tüm içeriğini silmek için:

drush delete-all article  
3
gerzenstl

Tümünü sil modülünü deneyebilir, 'admin/content/delete_content' adresine gidebilir ve belirli içerik türlerine ait içeriğin silinmesi için bir form sunulur.

Saygılarımızla

1
Oleg Videnov

Bu modül bir sitedeki tüm içeriği ve/veya kullanıcıları silmek için kullanılır. Bu, çoğunlukla birkaç durumda kullanışlı olabilecek bir geliştirici aracıdır.

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

toplu Silme modülü, toplu iş api'sini kullanarak belirli bir düğüm türündeki düğümleri silecektir. Az sayıda düğüm için Views Batch Operations modülünün (VBO) kullanılması önerilir. Ancak 10.000 düğümü silmeniz gerekiyorsa bu modül daha iyi bir seçenek olabilir.

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

0
onlink

Geçiş modülünü etkinleştirdiyseniz şunları kullanabilirsiniz:

$ drush migrate-wipe <content-type>

Bkz. Drush kullanarak tipik taşıma komutları .

0
jiv-e

İçerik türünün tüm düğümlerini programlı olarak silmek burada yardımcı bir işlevdir:


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