it-swarm-korea.com

주어진 컨텐츠 유형의 모든 노드를 삭제하는 방법?

특정 콘텐츠 유형의 수천 노드가 있습니다. 웹 인터페이스 (example.com/admin/content)를 사용하면 한 번에 약 50 개만 삭제할 수 있습니다. 어떻게 빨리 삭제할 수 있습니까?

33
Greg

이를위한 모듈이 있습니다 (TM).

대량 삭제 를 참조하십시오.

Node_delete_multiple ()을 한 번 호출하여 수천 개의 노드를 삭제할 때 시간 초과 또는 메모리 문제를 피하기 위해 배치 API를 사용하여 노드를 삭제합니다.

대량 삭제는 버려진 모듈입니다. 대안을보십시오 :

33
Berdir

영감을 얻기 위해 Devel Generate 모듈을 살펴보면 "content kill"기능이 있습니다. 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')));을 직접 호출하려고합니다.

27
tim.plunkett

Drupal 8) 한 가지 방법은 EntityStorageInterface :: delete () 메소드와 함께 entityQuery () 메소드를 사용하는 것입니다.

$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 인터페이스 페이지를 확인할 수 있습니다

EDIT (다른 방법으로 @ 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);'

모든 기사가 삭제됩니다.

19
Adrian Cid Almaguer

UI를 통해 순수하게 수행하려면 devel_generate 모듈을 사용할 수 있습니다.

  1. "구성"(admin/config/development/generate/content)의 "Generate Content"메뉴로 이동하십시오.
  2. 삭제할 컨텐츠 유형을 선택하십시오.
  3. "새 컨텐츠를 생성하기 전에 이러한 컨텐츠 유형의 모든 컨텐츠 삭제"옆에있는 확인란이 선택되어 있는지 확인하십시오.
  4. 생성하려는 노드 수를 "0"으로 설정하십시오.

이렇게하면 노드가 생성되지 않고 선택한 유형의 모든 노드가 삭제됩니다.

13
areynolds

다음을 입력하여 Drupal Devel 모듈의 코드 부분을 사용하여 PHP 7)에 있습니다.

$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 설치)에서 아래 코드를 사용하여 파일을 만들고 파일을 실행하십시오.

<?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 및 모두 삭제 모듈을 사용하는 경우 터미널에서이를 수행하십시오.

 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

뷰 대량 작업은 유형별로 필터링하고 검색 기준과 일치하는 모든 노드를 선택할 수있는 BatchAPI 활성화, 구성 가능한 노드 관리 화면을 제공합니다.

그것은 Drupal 6)의 핸드 다운 솔루션입니다. 배치 삭제 외에도 노드를 대량 편집하고 다른 작업을 수행 할 수 있습니다.

Drupal 7 버전이 아직 준비되지 않은 것처럼 보이지만 D7 릴리스의 해당 모듈을보고 있습니다.

5
Darren Petersen

Drush 모듈을 사용하여 drush를 사용하십시오.

drush genc 0 --types=article --kill

또는 여기에 설명 된 UI에서 : http://befused.com/drupal/delete-nodes-devel

4
sunzu

다른 스 니펫은 다음과 같습니다.

$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는 삭제할 컨텐츠 유형입니다.

4
Tangurena

모두 삭제 모듈을 사용하며 D8과 잘 작동하며 매우 유용한 drush 명령을 제공합니다. 예를 들어 article 컨텐츠 유형의 모든 컨텐츠를 삭제하려면 다음을 수행하십시오.

drush delete-all article  
3
gerzenstl

모두 삭제 모듈을 시도하고 'admin/content/delete_content'로 이동하면 특정 컨텐츠 유형에 속하는 컨텐츠를 삭제하는 양식이 표시됩니다.

문안 인사

1
Oleg Videnov

이 모듈은 사이트에서 모든 컨텐츠 및/또는 사용자를 삭제하는 데 사용됩니다. 이것은 주로 개발자 도구이며 여러 경우에 유용 할 수 있습니다

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

일괄 삭제 모듈은 배치 API를 사용하여 특정 노드 유형의 모든 노드를 삭제합니다. 적은 수의 노드에는 VBO (Views Batch Operations) 모듈을 사용하는 것이 좋습니다. 그러나 10.000 개의 노드를 삭제해야하는 경우이 모듈이 더 나은 옵션 일 수 있습니다.

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

0
onlink

마이그레이션 모듈을 활성화 한 경우 다음을 사용할 수 있습니다.

$ drush migrate-wipe <content-type>

Drush를 사용하는 일반적인 마이그레이션 명령 을 참조하십시오.

0
jiv-e

프로그래밍 방식으로 컨텐츠 유형의 모든 노드를 삭제하십시오.


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