it-swarm.asia

كيفية حذف جميع العقد من نوع محتوى معين؟

لدي عدة آلاف من العقد من نوع محتوى معين. باستخدام واجهة الويب (example.com/admin/content) ، يمكنني حذف حوالي 50 في المرة الواحدة. كيف يمكنني حذفها بسرعة؟

33
Greg

هناك وحدة لذلك (TM).

انظر حذف مجمع .

سيستخدم ذلك Batch API لحذف العقد لتجنب مشاكل المهلة أو الذاكرة عند حذف آلاف العقد بمكالمة واحدة إلى node_delete_multiple ().

الحذف المجمع هو وحدة مهجورة. انظر للبدائل:

33
Berdir

بالنظر إلى وحدة Devel Generate للحصول على الإلهام ، إليك وظيفة "قتل المحتوى" 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 () الطريقة:

$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 صفحة الواجهة

[~ # ~] تحرير [~ # ~] (طريقة أخرى ، بفضل @ 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

إذا كنت تريد القيام بذلك بحتة من خلال واجهة المستخدم ، يمكنك استخدام وحدة devel_generate.

  1. انتقل إلى قائمة "إنشاء المحتوى" في "التكوين" (admin/config/development/توليد/محتوى).
  2. حدد أنواع المحتوى الذي تريد حذفه.
  3. تأكد من تحديد مربع الاختيار بجوار "حذف كل المحتوى في أنواع المحتوى هذه قبل إنشاء محتوى جديد".
  4. قم بتعيين عدد العقد التي ترغب في إنشائها إلى "0".

بهذه الطريقة ، لن يتم إنشاء أي عقد وسيتم حذف جميع العقد من الأنواع المحددة.

13
areynolds

يمكنك القيام بذلك في Drupal 7 باستخدام Execute PHP جزء الرمز من وحدة Devel عن طريق إدخال:

$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

مع وحدة Devel ، باستخدام drush:

drush genc 0 --types=article --kill

أو في واجهة المستخدم كما هو موضح هنا: 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 وتوفر أوامر مفيدة للغاية. على سبيل المثال ، لحذف كل محتوى نوع المحتوى article:

drush delete-all article  
3
gerzenstl

يمكنك محاولة حذف الكل الوحدة النمطية ، انتقل إلى "admin/content/delete_content" وستظهر لك نموذج لحذف المحتوى الذي ينتمي إلى أنواع محتوى معينة.

مع تحياتي

1
Oleg Videnov

تستخدم هذه الوحدة لحذف كل المحتوى و/أو المستخدمين من الموقع. هذا هو في الأساس أداة مطور ، والتي يمكن أن تكون مفيدة في العديد من الحالات

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

كما ستقوم وحدة الحذف المجمع بحذف أي عقد من نوع عقدة معينة باستخدام api batch. يُنصح باستخدام وحدة عمليات المشاهدات المجمعة (VBO) لعدد صغير من العقد. ولكن إذا كان عليك حذف 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