لدي عدة آلاف من العقد من نوع محتوى معين. باستخدام واجهة الويب (example.com/admin/content) ، يمكنني حذف حوالي 50 في المرة الواحدة. كيف يمكنني حذفها بسرعة؟
هناك وحدة لذلك (TM).
انظر حذف مجمع .
سيستخدم ذلك Batch API لحذف العقد لتجنب مشاكل المهلة أو الذاكرة عند حذف آلاف العقد بمكالمة واحدة إلى node_delete_multiple ().
الحذف المجمع هو وحدة مهجورة. انظر للبدائل:
بالنظر إلى وحدة 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')));
مباشرة.
في 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);'
سيؤدي هذا إلى حذف جميع مقالاتك.
إذا كنت تريد القيام بذلك بحتة من خلال واجهة المستخدم ، يمكنك استخدام وحدة devel_generate.
بهذه الطريقة ، لن يتم إنشاء أي عقد وسيتم حذف جميع العقد من الأنواع المحددة.
يمكنك القيام بذلك في 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);
}
قم بإنشاء ملف برمز أدناه في جذر تثبيت 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);
}
?>
افعل ذلك في المحطة ، إذا كنت تستخدم 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
توفر عمليات طرق العرض المجمعة شاشة BatchAPI ممكَّنة وقابلة للتهيئة للعقدة والتي تتيح التصفية حسب النوع واختيار جميع العقد المطابقة لمعايير البحث وما إلى ذلك.
هذا هو حل عملي في Drupal 6 - إلى جانب حذف الدفعة ، يمكنك تعديل العقد بشكل مجمّع والقيام بمجموعة من الأشياء الأخرى.
يبدو أن الإصدار Drupal 7 غير جاهز حتى الآن - لكنني سأشاهد هذه الوحدة لإصدار D7.
مع وحدة Devel ، باستخدام drush:
drush genc 0 --types=article --kill
أو في واجهة المستخدم كما هو موضح هنا: http://befused.com/drupal/delete-nodes-devel
مقتطف آخر هو:
$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
هو نوع المحتوى المراد حذفه.
أستخدم حذف الكل الوحدة النمطية ، وهي تعمل بشكل جيد مع D8 وتوفر أوامر مفيدة للغاية. على سبيل المثال ، لحذف كل محتوى نوع المحتوى article
:
drush delete-all article
يمكنك محاولة حذف الكل الوحدة النمطية ، انتقل إلى "admin/content/delete_content" وستظهر لك نموذج لحذف المحتوى الذي ينتمي إلى أنواع محتوى معينة.
مع تحياتي
تستخدم هذه الوحدة لحذف كل المحتوى و/أو المستخدمين من الموقع. هذا هو في الأساس أداة مطور ، والتي يمكن أن تكون مفيدة في العديد من الحالات
https://www.drupal.org/project/delete_all
كما ستقوم وحدة الحذف المجمع بحذف أي عقد من نوع عقدة معينة باستخدام api batch. يُنصح باستخدام وحدة عمليات المشاهدات المجمعة (VBO) لعدد صغير من العقد. ولكن إذا كان عليك حذف 10.000 عقد ، فقد تكون هذه الوحدة خيارًا أفضل.
إذا قمت بتمكين وحدة الترحيل ، فيمكنك استخدام:
$ drush migrate-wipe <content-type>
حذف جميع عقد نوع المحتوى برمجيًا هنا هي وظيفة مساعد:
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.'));
}
}