এটি তৈরির X সপ্তাহ পরে একটি নোড মুছুন


14

আমি কোনও নোড পরে কীভাবে মুছতে পারি, উদাহরণস্বরূপ, এটি তৈরি করা হয়েছে 2 সপ্তাহ?

উত্তর:


18

যদি আপনি কোনও বিকাশকেন্দ্রিক সমাধানের সন্ধান করেন তবে আপনি hook_cron()পুরানো নোডগুলি সাফ করার জন্য একটি কাস্টম মডিউলটিতে আবেদন করতে পারেন :

function MYMODULE_cron() {

  // Other conditions can be altered/added as neeed
  $query = \Drupal::entityQuery('node')
    ->condition('created', strtotime('-2 week'), '<=');
  $nids = $query->execute();
  foreach ($nids as $nid) {
    $node = node_load($nid);
    $node->delete();
  }
}

ড্রুপাল 8-এ বিধি দিয়ে এটি কীভাবে করা যায়?
রবিনসন

1
এটি ইচ্ছাকৃতভাবে সাইট নির্মাতা / নিয়ম ভিত্তিক পদ্ধতির থেকে পৃথক পদ্ধতি ছিল। আমি @ আনসেটলিংট্রেন্ডকে তার উত্তরটি সেই অনুযায়ী আপডেট করার জন্য বলব। আমি ডি 8-তে নিয়মগুলি এখনও চেষ্টা করি নি, তাই আমি সেই মডিউলটির ভিত্তিতে সমাধানের সাথে কথা বলতে পারি।
শন কন

7
$ নোড = $ স্টোরেজ-> লোডমલ્ટিয়ালপলিট (ids nids) এবং তারপরে $ স্টোরেজ-> ডিলিটমલ્ટিয়ালপল ($ নোড) ব্যবহার করা কিছুটা দ্রুত, তবে আপনি যদি কয়েক ডজন নোড মুছে না থাকেন তবে কোনও বড় সমস্যা নয়।
বারদির

@ সিমোনে আপনি এখনও পারবেন না এখনও কোনও নিয়মের সময়সূচী মডিউল নেই, প্লাস বিধি 8 উত্পাদন প্রস্তুত নয়।
কোনও এসসিওয়েট

1
আমি স্কেলিংয়ের জন্য একটি সারি ভিত্তিক পদ্ধতির তৈরি করব। আপনার নিয়মের দরকার নেই।
কেভিন

4

শন কন এর উত্তরকে ভিত্তি করেই এখানে নবীনীদের সম্পূর্ণ সমাধান:

  1. আপনার মূল ফাইল ডিরেক্টরিতে যান এবং "মুছে ফেলা_নোড" ফোল্ডার তৈরি করুন
  2. আপনি সবেমাত্র তৈরি করা ফোল্ডারে একটি ফাইল তৈরি করুন: "মুছে ফেলা_যোদ্ধা_নোডস.ইন.ইফ.এল" এবং এতে এই কোডটি আটকে দিন:

    name: Delete old nodes
    description: Deletes nodes older than 30 days.
    package: Custom
    type: module
    version: 1.0
    core: 8.x
  3. "ডিলিট_ল্ড_নোড.মডিউল" নামে একটি ফাইল তৈরি করুন এবং এতে এই কোডটি দিন:

    <?php
    
    function delete_old_nodes_cron() {
    
      $query = \Drupal::entityQuery('node')
        ->condition('created', strtotime('-2 week'), '<='); // Can change -2 week to -2 year or -3 day
      $nids = $query->execute();
      foreach ($nids as $nid) {
        $node = node_load($nid);
        $node->delete();
      }
    }
    
    ?>
  4. ফ্লাশ ক্যাশে, তারপরে মডিউল পৃষ্ঠায় নেভিগেট করুন - (thyite.com/admin/modules) - এবং আপনার মডিউল সক্ষম করুন, ("পুরানো নোডগুলি মুছুন" অনুসন্ধান করে মডিউলগুলির নামের সাথে চেকবক্সটি ক্লিক করুন এবং সংরক্ষণ করুন ক্লিক করুন)।

  5. সম্পন্ন! আপনি যখনই ক্রোন চালান, নোডগুলি / পৃষ্ঠাগুলি যা -2 সপ্তাহ প্রকাশিত হয়েছিল বা এখন যা আছে তা মুছে ফেলা হবে।

  6. দ্রষ্টব্য: ক্রোন চলাকালীন সময় নির্ধারণ করতে, thyite.com/admin/config/system/cron এ যান

পরীক্ষামূলক:

একটি নোড তৈরি করুন এবং প্রকাশিত তারিখটি সাধারণত ডান পাশের বারে -2 সপ্তাহে বা আপনার কাছে যা আছে তা পরিবর্তন করুন। ম্যানুয়ালি আপনার ক্রাইট চালান yourite.com/admin/config/system/cron এবং আপনি আপনার নোড খুঁজে পেতে সক্ষম হবে না।


আপনার বন্ধ করার দরকার নেই?>। এটি কিছু সার্ভার সেটআপগুলিতে ত্রুটি সৃষ্টি করবে। আমি কুইউএপিআই ব্যবহার করে আরও কাঠামোগত সেটআপ রাখার পরামর্শ দেব, যদি হাজার হাজার বা এমনকি কয়েকশ নোড মুছতে হয় তবে এটি সিস্টেমটিকে উপরের ক্রোন এর মধ্যে স্থির করে রাখবে না। sitepPoint.com/…
কেভিন

হাহ। যখন আমার কাছে নেই?> কোডটি আমার পক্ষে কাজ করবে না।
ক্রিস হ্যাপি

2

আমি একটি hook_cron()বাস্তবায়নও ব্যবহার করব তবে নীচের কোডটি ব্যবহার করব।

function mymodule_cron() {
  $storage_handler = \Drupal::entityTypeManager()
    ->getStorage('node');
  $query = \Drupal::entityQuery('node')
    ->accessCheck(FALSE)
    ->condition('created', strtotime('-2 week'), '<=');
  $result = $query->execute();
  if (!empty($result)) {
    $nids = array_keys($result);
    $nodes = $storage_handler->loadMultiple($nids);
    $storage_handler->delete($nodes);
  }
}

নোডগুলি মুছতে আমি যে কোডটি ব্যবহার করেছি তা হ'ল হ'ল অবনতি বার্তাটি ব্যবহার করার entity_delete_multiple()পরামর্শ দেয়। সত্তা কোয়েরিটি এড়ানোর
জন্য আমি একটি কলও ব্যবহার করেছি accessCheck(FALSE)কেবল বেনামে ব্যবহারকারীর অ্যাক্সেস রয়েছে এমন নোডগুলি ফেরত দেয়। (ক্রোন কার্যগুলি অনামী ব্যবহারকারী হিসাবে চালিত হয়))

তবে যদি মুছে ফেলার নোডগুলি বেশি হওয়ার সম্ভাবনা থাকে তবে আমি ক্রোন টাস্কগুলি চালানোর সময় মুছে ফেলা নোডের সংখ্যা সীমাবদ্ধ করব।

function mymodule_cron() {
  $storage_handler = \Drupal::entityTypeManager()
    ->getStorage('node');
  $query = \Drupal::entityQuery('node')
    ->accessCheck(FALSE)
    ->condition('created', strtotime('-2 week'), '<=')
    ->range(0,30);
  $result = $query->execute();
  if (!empty($result)) {
    $nids = array_keys($result);
    $nodes = $storage_handler->loadMultiple($nids);
    $storage_handler->delete($nodes);
  }
}

আমি জানি এই প্রশ্নটি পুরানো তবে @ কিমলালানো আপনার উত্তরটি আমার সময় বাঁচিয়েছে! এবং এটির একটি সদৃশ একটি নতুন প্রশ্ন পোস্ট করার পরিবর্তে, আপনি কীভাবে নোডগুলি মুছে ফেলতে টাইপ নোডের মধ্যে সীমাবদ্ধ করবেন সে সম্পর্কে আরও বিস্তারিত জানাতে পারেন article , আপনাকে ধন্যবাদ
এলি মাসাদ

hook_cron()দেখানো সর্বশেষ বাস্তবায়ন এটি ইতিমধ্যে করেছে, যেমন এটি কল করে range(), পূর্ববর্তী বাস্তবায়ন থেকে আলাদা।
kiamlaluno

range()হিসাবে আমি বুঝি, সীমাবদ্ধ করবে নোড সংখ্যা প্রতিটি সময় ক্রন কর্ম চালানোর মোছা হয়েছে। কিন্তু আমি সাইট ধরনের 30 নোড আছে বলে pagearticleতৈরির তারিখ দিয়ে চেয়ে বেশি 2 সপ্তাহ আগে ... কিভাবে ধরনের শুধুমাত্র নোড মুছে ফেলতে articleধরনের নোড মুছে page? ... আমার নম্র পিএইচপি দক্ষতা ক্ষমা করুন তবে আমি উপরের কোডে এ জাতীয় বাস্তবায়ন দেখতে পেলাম না! ধন্যবাদ
এলি মাসাড

0

আমি এটির মতো করার চেষ্টা করব:

  1. 2+ সপ্তাহ পুরানো সমস্ত নোডের একটি দৃশ্য তৈরি করুন
  2. ক্রোন রক্ষণাবেক্ষণে চালানোর জন্য একটি সিস্টেম বিধি তৈরি করুন
  3. নিয়ম কনফিগারেশনে, এই দর্শন ফলাফলগুলির পুনরাবৃত্তি করতে একটি লুপ তৈরি করুন
  4. প্রতিটি নোড মুছুন

আমি যখন সুযোগ পেলাম তখন এটি পরীক্ষা করার চেষ্টা করব, কারণ 3 এর মত দৃষ্টিভঙ্গিটি ব্যবহার করা কতটা সহজ / সম্ভব তা আমি পুরোপুরি নিশ্চিত নই, তবে আমি এখানেই শুরু করেছি। অবশ্যই, এই সাবধানতার সাথে আসে যে 2 সপ্তাহ বয়স্ক হয়ে উঠলে এটি নোডগুলি মুছবে না, তবে ক্রোন যখন আপনার সিস্টেমে চলে তখন তার উপর নির্ভর করবে; তবে, আমি ধরে নিই যে 3 ঘন্টা বা তার মধ্যে এখনও যথেষ্ট।

(আমি কেবল লক্ষ্য করেছি এটি ডি 8 এর জন্য ছিল; আমি মনে করি যে প্রক্রিয়াটি এখনও সবিস্তারে রয়েছে))


আমি টাইপ করার পরে আমি ডি 8 বুঝতে পারিনি। আমি কেবল জানি ডি 8 এর স্থিতিশীল হওয়ার জন্য নিয়মে আলফা রয়েছে; এটি এখনও চেষ্টা করেন নি।
আনসেটল্টিংট্রেন্ড

আমি বিধিগুলির দেব সংস্করণ নিয়ে গিয়েছিলাম। আমি যা চেষ্টা করেছিলাম তার পক্ষে এটি স্থিতিশীল মনে হয়েছিল, তবে আমি দৃ .়ভাবে আটকে গিয়েছি যে কোনওরকম পরিকল্পনা করা হয়নি - অন্যথায় পরিকল্পনা করা হয়েছে - ভিউ রুলস মডিউলের ডি 8 সংস্করণ দেখার ফলাফলগুলি লুপ করতে ব্যবহার করতে। আমি যদি ভাবতে পারি না এমন কোনও নিয়মে ভিউগুলি পাওয়ার কোনও উপায় থাকে তবে তা কার্যকর হতে পারে। নাহলে আমি নিশ্চিত নই
আনসেটল্টিংট্রেন্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.