উত্তর:
কেবল নডের ধরণটি আপনার মডিউলের উপর নির্ভর করে তা নিশ্চিত করুন, তারপরে দ্রুপাল এটি আপনার জন্য স্বয়ংক্রিয়ভাবে মুছে ফেলবে।
উদাহরণের জন্য বইয়ের মডিউলে নোড.টাইপ.বুক.আইএমএল দেখুন, এটি প্রাসঙ্গিক অংশ:
dependencies:
enforced:
module:
- book
নোট করুন যে ব্যবহারকারীদের তখনকার মডিউলটি আনইনস্টল করার আগে সেই ধরণের সমস্ত সামগ্রী মুছতে হবে।
মন্তব্য করার মতো পর্যাপ্ত creditণ নেই, আমি এটি এখানে রাখব:
@ বার্ডির, আমার কাছে মনে হয়েছে যে নোড.টাইপ.সি.পি.এম.এম.এম. ফাইলে মডিউলটি প্রয়োগ করা আনইনস্টল করার সময় নোডগুলি মোছার কার্যকর করতে যথেষ্ট নয়
নোট করুন যে ব্যবহারকারীদের তখনকার মডিউলটি আনইনস্টল করার আগে সেই ধরণের সমস্ত সামগ্রী মুছতে হবে
আমার ক্ষেত্রে মডিউল আনইনস্টল করার সময় বিষয়বস্তুর ধরণ মুছে ফেলা হয়। তবে কাস্টম সামগ্রী (নোড) মুছে ফেলা কার্যকর হয় না। এটি অর্জন করতে কাস্টম মডিউলটি প্রয়োগ করা উচিত ModuleUninstallValidatorInterface
।
প্রয়োগ করা হলে কাস্টম নোডগুলি মোছার আগে কাস্টম মডিউলটি আনইনস্টল করা যায় না। নির্বাচন করা বাক্সটি ডি-অ্যাক্টিভেট করা হবে।
ইন্টারফেস বাস্তবায়নের পরিবর্তে আমি নোডগুলি মুছে ফেলে এটি নোংরা করছি hook_uninstall()
:
function MYMODULE_uninstall() {
// Delete custom_type nodes when uninstalling.
$query = \Drupal::entityQuery('node')
->condition('type', 'custom_type');
$nids = $query->execute();
// debug($nids);
foreach ($nids as $nid) {
\Drupal\node\Entity\Node::load($nid)->delete();
}
}
মডিউলটি আনইনস্টল করার পরে কিছু ক্রিয়াকলাপ শুরু করতে আপনাকে hook_uninstall
আপনার মডিউলটির *.install
ফাইলটিতে প্রয়োগ করতে হবে। সামগ্রীর ধরণের মোছার আগে আপনি সেই বিষয়বস্তুর ধরণের সমস্ত নোডও মুছে ফেলা হয়েছে তা নিশ্চিত করতে চাইতে পারেন। পরিশেষে, মডিউলটি আনইনস্টল করার পরে এবং সামগ্রীটির ধরণ মুছে ফেলার পরে আপডেট কনফিগারেটটি রফতানি করতে ভুলবেন না।
/**
* Place a short description here.
*/
function MYMODULE_uninstall() {
// Delete all nodes of given content type.
$storage_handler = \Drupal::entityTypeManager()
->getStorage('node');
$nodes = $storage_handler->loadByProperties(['type' => 'MACHINE_NAME_OF_TYPE']);
$storage_handler->delete($nodes);
// Delete content type.
$content_type = \Drupal::entityTypeManager()
->getStorage('node_type')
->load('MACHINE_NAME_OF_TYPE');
$content_type->delete();
}
bundle
এর MACHINE_NAME_OF_TYPE
মত নোড-আইডি ক্যোয়ারী ভিত্তিক উত্তর করে, কি না? মানে, এটি কিছুটা ব্যয়বহুল বলে মনে হচ্ছে (যদি প্রচুর এনআইডি থাকে) এবং আমি যখন সম্ভব তখন এই সমাধানটি ব্যবহার করতে চাই।
drupal snippet --code='$content_type = \Drupal::entityManager()->getStorage("node_type")->load("MACHINE_NAME_OF_TYPE"); $content_type->delete();'