উত্তর:
যদি আপনি কোনও বিকাশকেন্দ্রিক সমাধানের সন্ধান করেন তবে আপনি 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();
}
}
শন কন এর উত্তরকে ভিত্তি করেই এখানে নবীনীদের সম্পূর্ণ সমাধান:
আপনি সবেমাত্র তৈরি করা ফোল্ডারে একটি ফাইল তৈরি করুন: "মুছে ফেলা_যোদ্ধা_নোডস.ইন.ইফ.এল" এবং এতে এই কোডটি আটকে দিন:
name: Delete old nodes
description: Deletes nodes older than 30 days.
package: Custom
type: module
version: 1.0
core: 8.x
"ডিলিট_ল্ড_নোড.মডিউল" নামে একটি ফাইল তৈরি করুন এবং এতে এই কোডটি দিন:
<?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();
}
}
?>
ফ্লাশ ক্যাশে, তারপরে মডিউল পৃষ্ঠায় নেভিগেট করুন - (thyite.com/admin/modules) - এবং আপনার মডিউল সক্ষম করুন, ("পুরানো নোডগুলি মুছুন" অনুসন্ধান করে মডিউলগুলির নামের সাথে চেকবক্সটি ক্লিক করুন এবং সংরক্ষণ করুন ক্লিক করুন)।
সম্পন্ন! আপনি যখনই ক্রোন চালান, নোডগুলি / পৃষ্ঠাগুলি যা -2 সপ্তাহ প্রকাশিত হয়েছিল বা এখন যা আছে তা মুছে ফেলা হবে।
দ্রষ্টব্য: ক্রোন চলাকালীন সময় নির্ধারণ করতে, thyite.com/admin/config/system/cron এ যান
পরীক্ষামূলক:
একটি নোড তৈরি করুন এবং প্রকাশিত তারিখটি সাধারণত ডান পাশের বারে -2 সপ্তাহে বা আপনার কাছে যা আছে তা পরিবর্তন করুন। ম্যানুয়ালি আপনার ক্রাইট চালান yourite.com/admin/config/system/cron এবং আপনি আপনার নোড খুঁজে পেতে সক্ষম হবে না।
আমি একটি 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()
, পূর্ববর্তী বাস্তবায়ন থেকে আলাদা।
range()
হিসাবে আমি বুঝি, সীমাবদ্ধ করবে নোড সংখ্যা প্রতিটি সময় ক্রন কর্ম চালানোর মোছা হয়েছে। কিন্তু আমি সাইট ধরনের 30 নোড আছে বলে page
ও article
তৈরির তারিখ দিয়ে চেয়ে বেশি 2 সপ্তাহ আগে ... কিভাবে ধরনের শুধুমাত্র নোড মুছে ফেলতে article
ধরনের নোড মুছে page
? ... আমার নম্র পিএইচপি দক্ষতা ক্ষমা করুন তবে আমি উপরের কোডে এ জাতীয় বাস্তবায়ন দেখতে পেলাম না! ধন্যবাদ
আমি এটির মতো করার চেষ্টা করব:
আমি যখন সুযোগ পেলাম তখন এটি পরীক্ষা করার চেষ্টা করব, কারণ 3 এর মত দৃষ্টিভঙ্গিটি ব্যবহার করা কতটা সহজ / সম্ভব তা আমি পুরোপুরি নিশ্চিত নই, তবে আমি এখানেই শুরু করেছি। অবশ্যই, এই সাবধানতার সাথে আসে যে 2 সপ্তাহ বয়স্ক হয়ে উঠলে এটি নোডগুলি মুছবে না, তবে ক্রোন যখন আপনার সিস্টেমে চলে তখন তার উপর নির্ভর করবে; তবে, আমি ধরে নিই যে 3 ঘন্টা বা তার মধ্যে এখনও যথেষ্ট।
(আমি কেবল লক্ষ্য করেছি এটি ডি 8 এর জন্য ছিল; আমি মনে করি যে প্রক্রিয়াটি এখনও সবিস্তারে রয়েছে))