जवाबों:
बस यह सुनिश्चित करें कि नोड प्रकार आपके मॉड्यूल पर निर्भर करता है, फिर ड्रुपल आपके लिए इसे स्वचालित रूप से हटा देगा।
एक उदाहरण के लिए किताब मॉड्यूल में नोड। टाइप.बुक.लाइम देखें, यह प्रासंगिक हिस्सा है:
dependencies:
enforced:
module:
- book
ध्यान दें कि उपयोगकर्ताओं को मॉड्यूल को अनइंस्टॉल करने से पहले उस प्रकार की सभी सामग्री को हटाना होगा।
टिप्पणी करने के लिए पर्याप्त क्रेडिट नहीं है, मैं इसे यहां डालूंगा:
@Berdir, यह मुझे लगता है कि नोड में मॉड्यूल को लागू करना।
ध्यान दें कि उपयोगकर्ताओं को मॉड्यूल को अनइंस्टॉल करने से पहले उस प्रकार की सभी सामग्री को हटाना होगा
मेरे मामले में मॉड्यूल की स्थापना रद्द करते समय सामग्री-प्रकार हटा दिया जाता है। लेकिन कस्टम कंटेंट (नोड्स) को हटाना लागू नहीं है। इसे प्राप्त करने के लिए कस्टम मॉड्यूल को लागू करना चाहिए 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();'