প্রোগ্রামিয়ালি কোনও কনটেন্টের ধরণ কীভাবে মুছবেন?


12

আমি মডিউল ইনস্টলেশন (ফিল্ড স্টোরেজ কনফিগারেশন ব্যবহার করে) এর সময় প্রোগ্রামিয়ালি একটি সামগ্রীর ধরণ তৈরি করেছি ।

আমি মডিউলটি আনইনস্টল করার সময় সেই বিষয়বস্তুর প্রকারটি মুছতে চাই ।

ড্রুপাল 8 দিয়ে এটি করার কোনও উপায় আছে কি?

উত্তর:


15

কেবল নডের ধরণটি আপনার মডিউলের উপর নির্ভর করে তা নিশ্চিত করুন, তারপরে দ্রুপাল এটি আপনার জন্য স্বয়ংক্রিয়ভাবে মুছে ফেলবে।

উদাহরণের জন্য বইয়ের মডিউলে নোড.টাইপ.বুক.আইএমএল দেখুন, এটি প্রাসঙ্গিক অংশ:

dependencies:
  enforced:
    module:
      - book

নোট করুন যে ব্যবহারকারীদের তখনকার মডিউলটি আনইনস্টল করার আগে সেই ধরণের সমস্ত সামগ্রী মুছতে হবে।


9

এটি আমার জন্য এটি বলে মনে হচ্ছে।

$content_type = \Drupal::entityManager()->getStorage('node_type')->load('MACHINE_NAME_OF_TYPE');
$content_type->delete();

যথাযথ পালানোর সাথে সাথে ড্রুপাল কনসোল ব্যবহার করে এর একটি সিএলআই ওয়ান লাইনার হ'ল:drupal snippet --code='$content_type = \Drupal::entityManager()->getStorage("node_type")->load("MACHINE_NAME_OF_TYPE"); $content_type->delete();'
কমলেনিক

5

মন্তব্য করার মতো পর্যাপ্ত 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();
  }
}

3

মডিউলটি আনইনস্টল করার পরে কিছু ক্রিয়াকলাপ শুরু করতে আপনাকে 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মত নোড-আইডি ক্যোয়ারী ভিত্তিক উত্তর করে, কি না? মানে, এটি কিছুটা ব্যয়বহুল বলে মনে হচ্ছে (যদি প্রচুর এনআইডি থাকে) এবং আমি যখন সম্ভব তখন এই সমাধানটি ব্যবহার করতে চাই।
টপ-মাস্টার

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