প্রদত্ত সামগ্রীর ধরণের সমস্ত নোড কীভাবে মুছবেন?


31

আমার কাছে একটি নির্দিষ্ট সামগ্রী ধরণের কয়েক হাজার নোড রয়েছে। ওয়েব ইন্টারফেস (উদাহরণস্বরূপ / অ্যাডমিন / কনটেন্ট) ব্যবহার করে, আমি একবারে প্রায় 50 টি মুছতে পারি। কীভাবে তাড়াতাড়ি মুছে ফেলব?

উত্তর:


32

তার (টিএম) জন্য একটি মডিউল রয়েছে।

বাল্ক মুছুন দেখুন ।

নোড_ডিলেট_ মাল্টিপল () -তে একক কল সহ কয়েক হাজার নোড মুছে ফেলা হলে টাইমআউট বা মেমরির সমস্যাগুলি এড়াতে নোডগুলি মুছতে ব্যাচ এপিআই ব্যবহার করবে।

বাল্ক মোছা একটি পরিত্যক্ত মডিউল। বিকল্পগুলির জন্য দেখুন:


বাহ, আমি এটিকে পুরোপুরি মিস করেছি। ভাল সন্ধান।
গ্রেগ

4
এক অন্য পদ্ধতি, যে দরকারী যদি আপনি একটি সহজ বিষয়বস্তুর প্রকার ফিল্টার চেয়ে বেশি করছেন হতে পারে, দেখেছে বাল্ক অপারেশনস ব্যবহার করা drupal.org/project/views_bulk_operations
geerlingguy

বাল্ক মুছার মডিউল এখন পরিত্যক্ত। সেখানে ভিউজ বাল্ক অপারেশন ব্যবহার করার পরামর্শ দেওয়া হচ্ছে।
রেফিনিও

26

অনুপ্রেরণার জন্য ডেভেল জেনারেট মডিউলটির দিকে তাকানো, এটির "কন্টেন্ট কিল" ফাংশনটি এখানে 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_content_kill(array('node_types' => array('my_node_type')));সরাসরি কল করতে উদাহরণস্বরূপ / ড্যাভেল / পিএফপি ব্যবহার করব ।


17

ড্রুপাল 8-এ একটি উপায় হ'ল এনটিটিস্টোরিজ ইনটারফেস :: ডিলিট () পদ্ধতিটি দিয়ে এনটিটিকিউরি () পদ্ধতিটি ব্যবহার করুন:

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

আপনার যদি অন্য ফিল্টার / শর্ত প্রয়োগ করতে হয় তবে আপনি কোয়েরি ইন্টারফেস ইন্টারফেস পৃষ্ঠাটি দেখতে পারেন

সম্পাদনা করুন (অন্যভাবে, 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);'

এটি আপনার সমস্ত নিবন্ধ মুছে ফেলবে।


এটি সঠিক নয়, মুছুন () লোড হওয়া সত্তার প্রত্যাশা করে, আইডি নয়, যা সত্তা কোয়েরিটি দেয়। অ-বর্ণনামূলক $ ফলাফলের পরিবর্তে, $ আইডি বা $ এনআইডি এবং তারপরে $ স্টোরেজ-> মোছা ($ স্টোরেজ-> লোড ($ আইডি)) ব্যবহার করুন।
বার্ডির

@ বারডির ধন্যবাদ, আমি আবার কোডটি পরীক্ষা করব, সম্ভবত এই সমস্যাটি একটি সম্পাদনায় প্রবর্তিত হয়েছিল
অ্যাড্রিয়ান সিড আলমাগুয়ার

@ বার্দির আমি উত্তরটি আপডেট করি এবং আমি কোডটি পরীক্ষা করি এবং এটি কাজ করে, সমস্যাটি একটি সম্পাদনায় প্রবর্তিত হয়েছিল।
অ্যাড্রিয়ান সিড আলমাগুয়ার

2
@ অ্যাড্রিয়ানসিডএলমাগুয়ার, আপনি কোয়েরিটি$entities = $storage_handler->loadByProperties(['type' => 'YOUR_CONTENT_TYPE_NAME']);
কে 4

1
সম্প্রতি এটি একটি আপডেট হুক ব্যবহার করেছে, এটি লক্ষণীয় যে আপনি যদি ব্যবহার করেন তবে আপনার বিবৃতিটি entityQuery সেট করা উচিত accessCheck। অন্যথায় যদি আপনি এটিকে ড্রাশে চালনা করেন তবে ডিফল্টরূপে অ্যাক্সেসচেককে সত্য করে সেট করা হয় এবং যে কোনও নোডে ইউআইডি 0 অ্যাক্সেস থাকে না সেগুলি ফেরত দেওয়া হবে না।
awm

13

আপনি যদি ইউআই এর মাধ্যমে খাঁটিভাবে এটি করতে চান তবে আপনি ডেভেল_জেনারেট মডিউলটি ব্যবহার করতে পারেন।

  1. "কনফিগারেশন" (অ্যাডমিন / কনফিগারেশন / বিকাশ / উত্পন্ন / সামগ্রী) এ "সামগ্রী তৈরি করুন" মেনুতে নেভিগেট করুন।
  2. আপনি মুছে ফেলতে চান এমন সামগ্রীগুলি নির্বাচন করুন।
  3. "নতুন সামগ্রী তৈরি করার আগে এই বিষয়বস্তুর ধরণের সমস্ত সামগ্রী মুছুন" এর পাশের চেকবক্সটি চেক করা আছে কিনা তা নিশ্চিত করুন।
  4. আপনি "0" এ যে নোড তৈরি করতে চান তা নির্ধারণ করুন।

এইভাবে, কোনও নোড তৈরি হবে না এবং নির্বাচিত ধরণের সমস্ত নোড মুছে ফেলা হবে।


10

ড্রুপাল ইনস্টলেশনগুলির মূলের নীচে কোড সহ একটি ফাইল তৈরি করুন এবং ফাইলটি কার্যকর করুন।

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

1
db_fetch_object D7 ডাটাবেস এপিআই এর অংশ নয়।
ya.teck

10

আপনি এটি ড্রপাল 7 এ ডভিল মডিউলের এক্সিকিউট পিএইচপি কোড অংশটি ব্যবহার করে ব্যবহার করতে পারেন:

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

1
এটি খুব ধীরে ধীরে কার্যকর হবে, যদি আপনার কয়েক হাজার নোড মুছতে হয় তবে ভিবিও-র মতো ব্যাচ এপিআই ব্যবহার করে এমন কোনও পদ্ধতি ব্যবহার করা ভাল।
abielefeldt

6

টার্মিনালে এটি করুন, যদি আপনি ড্রশ এবং সমস্ত মডিউল মুছুন :

 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

5

ভিউজ বাল্ক অপারেশনগুলি একটি ব্যাচাপিআই সক্ষম, কনফিগারযোগ্য নোড অ্যাডমিন স্ক্রিন সরবরাহ করে যা প্রকার অনুসারে ফিল্টারিং করতে দেয়, আপনার অনুসন্ধানের মানদণ্ডের সাথে মিলিয়ে সমস্ত নোড নির্বাচন করে etc.

এটি ড্রুপাল 6 এ আমার হ্যান্ড-ডাউন সমাধান - ব্যাচ মুছা ছাড়াও, আপনি নোডগুলি বাল্ক-সম্পাদনা করতে পারেন এবং অন্যান্য জিনিসপত্রের গুচ্ছ করতে পারেন।

দেখে মনে হচ্ছে ড্রুপাল 7 সংস্করণটি এখনও প্রস্তুত নয় - তবে আমি ডি 7 রিলিজের জন্য সেই মডিউলটি দেখছি।


4

আরেকটি স্নিপেট হ'ল:

$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মুছে ফেলার বিষয়বস্তু কোথায় ।


3
এটি লক্ষ্য করা উচিত যে কেবলমাত্র ড্রুপাল 4.6, 5 এবং 6 এর জন্য কাজ করে। ড্রুপাল 7 সংস্করণটি হলdb_delete('node')
গ্রেগ

4

ডিভেল মডিউল সহ, ড্রশ ব্যবহার করে:

drush genc 0 --types=article --kill

বা ইউআইতে এখানে বর্ণিত হিসাবে: http://befused.com/drupal/delete-nodes-devel


এটি ডিভেল সাব-মডিউল devel_generateযা সক্ষম করা প্রয়োজন। এবং একাধিক ধরণের জন্য এটিdrush genc 0 --kill --types="article, page"
লেইম্যানেক্স

3

আমি সমস্ত মডিউল মুছুন ব্যবহার করি , এটি ডি 8 এর সাথে দুর্দান্ত কাজ করে এবং খুব দরকারী ড্রশ কমান্ড সরবরাহ করে। উদাহরণস্বরূপ, articleসামগ্রীর ধরণের সমস্ত সামগ্রী মুছতে :

drush delete-all article  

এটি ডি 8 দিয়ে কাজ করে? আমি মডিউলটি সক্ষম করেছি তবে আমি পেয়েছি ড্রাশ কমান্ড 'মুছুন-সমস্ত নিবন্ধ' পাওয়া যায়নি। আমি ড্রিশ ক্যাশেও সাফ করে দিয়েছি
ইয়াসিন তাহাতাহ 11'17

1

আপনি সমস্ত মডিউল মুছতে চেষ্টা করতে পারেন , 'অ্যাডমিন / সামগ্রী / মুছুন_সামগ্রী' তে নেভিগেট করুন এবং নির্দিষ্ট সামগ্রীর ধরণের সামগ্রী মুছে ফেলার জন্য আপনাকে একটি ফর্ম উপস্থাপন করা হবে।

শুভেচ্ছা সহ



0

এই মডিউলটি কোনও সাইট থেকে সমস্ত সামগ্রী এবং / অথবা ব্যবহারকারীদের মুছতে ব্যবহৃত হয়। এটি মূলত একটি বিকাশকারী সরঞ্জাম, যা বেশ কয়েকটি ক্ষেত্রে কাজে আসতে পারে

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

যেমন বাল্ক মুছুন মডিউলটি ব্যাচ এপিআই ব্যবহার করে নির্দিষ্ট নোড-টাইপের যে কোনও নোড মুছে ফেলবে will অল্প সংখ্যক নোডের জন্য ভিউজ ব্যাচ অপারেশন মডিউল (ভিবিও) ব্যবহার করার পরামর্শ দেওয়া হচ্ছে। তবে আপনাকে যদি ১০,০০০ নোড মুছতে হয় তবে এই মডিউলটি আরও ভাল বিকল্প হতে পারে।

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


0

প্রোগ্রামেটিকভাবে সমস্ত কন্টেন্টের নোড মুছুন এখানে একটি সহায়ক ফাংশন:


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


-1

আমি db_delete ব্যবহার করে শেষ করেছি , কোনও মডিউল প্রয়োজন নেই:

<?php
  db_delete('node')
    ->condition('type', 'MY_CONTENT_TYPE')
    ->execute();
?>

সম্পাদনা / সতর্কতা: নীচে বারডিরের মন্তব্য দেখুন। এই পদ্ধতিটি নোড সম্পর্কিত সমস্ত ডেটা পরিষ্কার করে না।


3
এই পদ্ধতির সাথে সমস্যাটি হ'ল অন্যান্য মডিউলগুলি তাদের তথ্যও প্রতিক্রিয়া জানাতে এবং মুছতে সক্ষম হয় না। বিষয়বস্তুর ধরণের উপর নির্ভর করে n নোডের কন্টেন্ট_প্রকারের টেবিলটিতে নোড নির্দিষ্ট ক্ষেত্র রয়েছে, ক্ষেত্রগুলি, ট্যাক্সোনমিগুলি (আসলে একটি ক্ষেত্রও আসলে), মন্তব্যগুলি এবং এই জাতীয়। সুতরাং আপনি সম্ভবত আপনার ডাটাবেসে অনেক বাসি তথ্য দিয়ে শেষ করতে পারেন।
বার্ডির

@ বার্ডির - আকর্ষণীয়। নোডগুলি মোছার জন্য আরও ভাল অন্তর্নির্মিত উপায় আছে কি?
গ্রেগ

3
নোড_ডিলেট () এবং নোড_ডিলেট_ মাল্টিপল () রয়েছে, টাইম.প্লিনকেটের উত্তর দেখুন, তবে এটি হাজার হাজার নোড পরিচালনা করার জন্য তৈরি করা হয়নি, দেখুন api.drupal.org/api/drupal/modules--node--node.module/function /… । এটি সমস্ত নোড লোড করে এবং তারপরে তাদের একক অনুরোধে পুনরাবৃত্তি করে। তাই আপনি যদি কয়েকশো বা হাজারো নোড মুছতে চান তবে বাল্কডিলেটের মতো একটি অবদানের মডিউল ব্যবহার করতে হবে pretty
বার্ডির

-1

আপনি কোড করতে চান না, এবং আপনি এই মডিউলটি চেষ্টা করতে পারেন, https://drupal.org/project/total_control

কেবল ড্যাশবোর্ডে যান -> সামগ্রী, সমস্ত সামগ্রী নির্বাচন করুন (আপনি সামগ্রীর ধরণের মাধ্যমে ফিল্টার করতে পারেন), তারপরে "আইটেম মুছুন" নির্বাচন করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.