মানগুলির জন্য ডেটা রয়েছে এমন একটি নির্বাচিত ক্ষেত্রের অনুমোদিত মান তালিকা থেকে আমি কীভাবে আইটেমগুলি সরিয়ে ফেলতে পারি?


16

আমি একটি বিষয়বস্তুর প্রকার তৈরি করেছি যার একটি তালিকা / নির্বাচন বিকল্প ক্ষেত্র রয়েছে এবং আমি নির্বাচিত তালিকাটি কাজ করতে প্রয়োজনীয় হিসাবে কী | মান জোড়গুলি প্রবেশ করিয়েছি।

ডেটা প্রবেশ করা হয়েছে, এবং সিদ্ধান্ত নেওয়া হয়েছে যে নির্দিষ্ট শর্তাদি আর প্রয়োগ হয় না এবং সেগুলি মুছে ফেলা উচিত।

তবে, যখন বলা শর্তগুলি অপসারণ করার চেষ্টা করছি তখন আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:

Allowed values list: some values are being removed while currently in use.

স্পষ্টতই, একটি প্রকল্পের জীবনে মানগুলি পরিবর্তন হতে চলেছে। নোড তালিকাভুক্ত শর্তগুলির সাথে যুক্ত হয়ে একবার আইটেমগুলি সরিয়ে নেওয়ার ব্যবহারিক উপায় কী?

এটি আমি যে নিকটতম জিনিসের সন্ধান করতে পেরেছিলাম তা সম্পর্কে:

https://drupal.org/node/1653012

এটি একটি ডি 6 প্লাগইন এবং কিছু প্যাচ কৌশল সম্পর্কে উল্লেখ করে যা আমি পছন্দ করি না। যদি সেই ক্ষেত্রের বৈধতা যাচাই অপসারণ করতে আমার শেষ পর্যন্ত প্যাচটি ব্যবহার করার উপায় অবলম্বন করতে হয়, তবে সেই আইটেমগুলির সাথে নোডগুলিতে এতিম রেখে দেওয়ার কোনও ক্ষতি আছে কি?

আপডেট, আমি এই সমস্যাটি আবারও একজন সরকারী ক্লায়েন্টের সাথে এসেছি, যিনি, ড্রুপাল সাইট থাকার গত 7 বছর ধরে একটি নির্বাচিত তালিকায় 50 টি রাজ্য এবং অঞ্চল রয়েছে। এখন, নীতি পরিবর্তন হয়েছে এবং অঞ্চলগুলিকে আর অন্তর্ভুক্ত করার দরকার নেই। নির্বাচিত তালিকা থেকে আইটেমগুলি সরিয়ে ফেলতে সক্ষম হওয়া গুরুত্বপূর্ণ, এবং এইভাবে আমি একটি অনুদানের প্রস্তাব দিচ্ছি।

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

আমি মাইএসকিউএল চালানোর জন্য খাঁটি এসকিউএল সমাধান নিয়ে খুশি; বা, আমি একটি মডিউল খুঁজছি।


3
স্পষ্টতই, একটি প্রকল্পের জীবনে মানগুলি পরিবর্তন হতে চলেছে। আমি বিতর্ক করব যে - প্রকল্পের শুরুতে একটি স্থির নির্বাচনী তালিকার মানগুলি সংজ্ঞায়িত করা উচিত। আপনার যদি এটি নমনীয় হওয়ার প্রয়োজন হয়, আপনার স্ট্যাটিক তালিকার পরিবর্তে একটি শব্দ রেফারেন্স ব্যবহার করা উচিত। স্ট্যাটিক তালিকাগুলি সেক্স (পুরুষ / মহিলা) এর মতো জিনিসের জন্য যা আমাদের মধ্যে যদি কোনও গুরুতর পরিবর্তন না ঘটে তবে তাড়াতাড়ি যে কোনও সময় পরিবর্তিত হওয়ার সম্ভাবনা থাকে না। এবং যদি এটি হয়, এটি যুক্ত করা হবে, সরানো হবে না । যখনই আমি এই 'ভুল' করে ফেলেছি আমি সর্বদা ব্যাক আউট করার সর্বোত্তম উপায়টি হ'ল ডেটাতে ম্যানুয়াল কোয়েরি চালানো
ক্লাইভ

1
আপনি কি এই তালিকাটিকে গতিশীল করতে চান? সৃষ্টি এবং মুছে ফেলার ক্ষেত্রে গতিশীল হচ্ছে।
এম আমা ডি

1
হ্যাঁ, আমি অনুমান করি যে এটি তখন মতামতের চেয়ে ঠিক কম - গাড়ি প্রস্তুতকারক সর্বদা নোড টাইপ বা আমি যে কোনও সাইট তৈরি করব তার ভোকাবুলারি হবে। যেহেতু নির্মাতারা গাড়ি (বা কারও মেরামত করা গাড়িটির বিভাগ) এটি একটি বিষয়শ্রেণীতে থাকে তাই এটি সামগ্রীর ধরণের চেয়ে আমার কাছে শ্রেনী হিসাবে সবচেয়ে অর্থবোধ করে। তবে আমি জানি যে সাহায্য করে না ... আমি ডিবিতে এতিম ডেটা ছেড়ে দেওয়ার বিষয়ে সতর্ক থাকব, আপনার সাইটে কী ইনস্টল করা হয়েছে এবং এটি কীভাবে কনফিগার করা হয়েছে তা না জেনে কী কী প্রভাব ফেলতে পারে তা বলা খুব শক্ত
ক্লাইভ

1
দর্শন_বুলক_অপারেশনগুলিতে কী ভুল?
ডোনকিক্সোট

1
হ্যাঁ, এই উত্তরগুলির কোনওটিরই এখনও কোনও উত্স নেই: /
টেনেক

উত্তর:


7

নিম্নলিখিত পদ্ধতির সাহায্যে আমি সম্প্রতি এরকম কিছু করেছি।

  1. নতুন অনুমোদিত মানগুলি যুক্ত করুন।
  2. "সক্রিয়" মানগুলি কনফিগার করতে একটি সেটিংস যুক্ত করুন।
  3. ফর্মের প্রদর্শন থেকে "নিষ্ক্রিয়" মানগুলি ফিল্টার করুন।

উদাহরণ:

/**
 * Admin settings form
 */
function MODULE_admin_settings(){

  $form = array();

  // Select active preferences for display
  $field = field_info_field('field_preferences');
  $preferences = list_allowed_values($field);
  $form['field_preferences_active'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Active preferences'),
    '#options' => $preferences,
    '#description' => t('Select the preferences available for user selection.'),
    '#default_value' => variable_get('field_preferences_active', array()),
  );

  return system_settings_form($form);

}

/**
 * Implements hook_field_attach_form
 */
function MODULE_field_attach_form($entity_type, $entity, &$form, &$form_state, $langcode) {

  // Filter out inactive preferences
  if(isset($form['field_preferences'])){
    $preferences = variable_get('field_preferences_active', array());
    foreach($preferences as $key => $preference){
      // If this preference isn't checked, but is set in the field values, unset it.
      if(empty($preference) && isset($form['field_preferences'][LANGUAGE_NONE]['#options'][$key])){
        unset($form['field_preferences'][LANGUAGE_NONE]['#options'][$key]);
      }
    }
  }

}

এইভাবে লিগ্যাসির ডেটা রেফারেন্সের জন্য সংরক্ষণ করা হয়, ফর্মটি বৈধতা দেয় এবং ডেটা অখণ্ডতা অক্ষত থাকে।


1
এই বিকল্পটি মূলত অ-বর্ণনামূলক (অর্থাত্ মোছার পরিবর্তে জিনিসগুলি আড়াল করা), এবং আপনি পুরানো বিকল্পগুলি থাকা কোনও সত্তাকে কীভাবে মোকাবেলা করতে পারেন তার সর্বোত্তম ক্রিয়া নির্ধারণ না করা পর্যন্ত এটি সম্ভবত সেরা সূচনার পয়েন্ট।
এমপিডোনাদিও

3

আমি জানি, সমস্ত ক্ষেত্রের ডেটা 2 টি টেবিলের মধ্যে সংরক্ষণ করা হয়: ফিল্ড_ডাটা_ফিল্ড_এফআইইএলডিআইএম এবং ফিল্ড_রেভিশন_ফিল্ড_এফআইএলডিএন। এবং আমি এখানে আমার চিন্তার নিশ্চয়তা পেয়েছি: /programming//a/7773117/1300562

সুতরাং অপ্রয়োজনীয় ক্ষেত্রের মানগুলি অপসারণ করতে আপনাকে উপরে উল্লিখিত সারণীগুলি থেকে এই মানগুলি মুছতে হবে এবং তারপরে অনুমোদিত মানগুলির তালিকা থেকে সেগুলি সরিয়ে ফেলতে হবে।

ধাপ 1.

$values_to_remove = array('value1', 'value2'); // an array of unnecessary values
$fieldname = 'FIELDNAME'; // name of your field. For example,
                          // 'territory' for field with machine name 'field_territory'
$entity_type = 'node'; // it's 'node' in your case, but it can be 'taxonomy_term' or something else

db_delete('field_data_field_' . $fieldname)
  ->condition('entity_type', $entity_type)
  ->condition('field_' . $fieldname . '_value', $values_to_remove)
  ->execute();

db_delete('field_revision_field_' . $fieldname)
  ->condition('entity_type', $entity_type)
  ->condition('field_' . $fieldname . '_value', $values_to_remove)
  ->execute();

পদক্ষেপ 2.
ফিল্ড সেটিংস পৃষ্ঠায় অপ্রয়োজনীয় জোড়া কী | মানটি মুছে ফেলুন এবং পরিবর্তনগুলি সংরক্ষণ করতে ফর্মটি জমা দিন।
এর পরে ক্যাশে স্বয়ংক্রিয়ভাবে সাফ করা উচিত, তবে আপনি যদি নোড পৃষ্ঠাগুলিতে সরানো ক্ষেত্রের মানগুলি দেখতে পান তবে ম্যানুয়ালি ক্যাশে সাফ করুন।

পিএস সম্প্রতি আমি একই ধরণের সমস্যার মুখোমুখি হয়েছি এবং এখন আমি পাঠ্য মানগুলির তালিকার পরিবর্তে "টার্ম রেফারেন্স" বা (আরও ভাল) "সত্তা রেফারেন্স" টাইপের ক্ষেত্রগুলি ব্যবহার করতে পছন্দ করি। রেফারেন্স ক্ষেত্রটি ব্যবহার করার সময়, আপনি প্রতিটি ক্ষেত্রের জন্য পৃথক শব্দভাণ্ডার তৈরি করতে পারেন এবং যে কোনও সময় স্রেফ তৈরি / সম্পাদনা / মোছার শর্তাদি তৈরি করতে পারেন।


যদি ক্ষেত্রটি পুনরাবৃত্তি করে, তবে সেই প্রশ্নগুলি অবশিষ্ট ডেটার জন্য বদ্বীপগুলি সামঞ্জস্য করবে না।
এমপিডোনাডিয়ো

1

প্রথমে আপনার যদি ক্ষেত্রের মধ্যে অনুমোদিত কোনও মান নির্দিষ্ট থাকে কিনা তা যাচাই করে নিন? যদি আপনি এটি করেন তবে অন্য একটি বিকল্প বৈধ হবে না। প্রথমে ক্ষেত্র সেটিংস ট্যাব থেকে মানগুলি সরিয়ে দেওয়ার চেষ্টা করুন।

বিকল্পভাবে আপনার কাছে 2 টি বিকল্প রয়েছে:


1।

আপনি যে সমস্ত মান ব্যবহারকারীর অ্যাকাউন্টে ব্যবহারের অনুমতিপ্রাপ্ত মান তালিকায় রেখেছেন তা সরিয়ে দিন। উদাহরণস্বরূপ, আপনি এটিগুলি অনুসন্ধান করতে একটি এসকিউএল কোয়েরি চালাতে পারেন:

SELECT * FROM field_data_field_MYFIELDNAME WHERE entity_type = 'user' and value = 'MY VALUE'

বা এমন একটি ব্যবহারকারী দৃষ্টিভঙ্গি তৈরি করুন যা আপনাকে দেখায় যে ব্যবহারকারীর অ্যাকাউন্টগুলির অনুমোদিত মানগুলির তালিকা থেকে আপনি কী মুছে ফেলতে চান have


2।

আপনি যদি ক্ষেত্রগুলি থেকে মানগুলি সরাতে না চান তবে এটি হ্যাক দ্বারা অর্জন করা যেতে পারে।

সতর্কতা, এটি উত্পাদনের জন্য সমাধানের প্রস্তাব দেওয়া হয়নি এবং আপনি কী করছেন তা আপনার জানা উচিত!

  1. মডিউলগুলি / ক্ষেত্র / ক্ষেত্র.মডিউলটি সন্ধান করুন এবং সম্পাদনা করুন
  2. ক্ষেত্র_হাস_ডাটা () ফাংশনটি সন্ধান করুন এবং ফাংশনের return TRUE;প্রথম লাইনে যুক্ত করুন।

    function field_has_data($field) {
      return FALSE; // HACK !!!
      $query = new EntityFieldQuery();
  3. আপনার যে মানগুলি চান তা দিয়ে ক্ষেত্রটি পুনরায় সংরক্ষণ করুন।
  4. আপনি এটি করার সাথে সাথে হ্যাক সরান।

0

আমি মনে করি আপনি আসলে ভিউজ বাল্ক অপারেশন মডিউলটি ব্যবহার করে এটি করতে পারেন ।

  1. সেই ক্ষেত্রটিতে একটি নতুন বিকল্প যুক্ত করুন যা আপনি প্রতিস্থাপন করতে চান। উদাহরণস্বরূপ: না | এনএ
  2. ক্ষেত্রটি সহ নোডের তালিকাতে একটি ভিউ তৈরি করুন
  3. সেই দৃশ্যে "বাল্ক অপারেশন: সামগ্রী" ক্ষেত্রগুলি যুক্ত করুন
  4. "সত্তা মানগুলি সংশোধন করুন" এবং "অব্যবহারযোগ্য টোকেনগুলি দেখান" পরীক্ষা করুন (প্রদর্শন মানগুলিতে সমস্ত নির্বাচন করুন)
  5. আপনি ফিল্টার মানদণ্ডে যে ক্ষেত্রটি পরিবর্তন করতে চান তা যুক্ত করুন এবং সেই ফিল্টারগুলিকে "এক্সপোজ" করুন
  6. সেই ভিউতে ইউআরএল পাথ সেট করুন
  7. যে ভিউ পৃষ্ঠাতে যান এবং পরিবর্তন করুন
  8. এখন, ক্ষেত্রের বিকল্পটি পরিবর্তন করতে এক্সপোজ এবং অপারেশন বৈশিষ্ট্যগুলি ব্যবহার করুন
  9. সম্পন্ন

0

এইচএল উত্তরের জন্য এখানে উন্নতি এসেছে যা আমি মনে করি সেরা:

সংক্ষিপ্তসার হিসাবে, আপনাকে এমন সামগ্রীকে নতুন মান নির্ধারণ করতে হবে যা আপনার নির্বাচিত ক্ষেত্রের জন্য "পুরানো" মানগুলি নির্ধারিত করে।

ভিউজ বাল্ক অপারেশনগুলি ছাড়াও , আপনাকে প্রশাসনিক দর্শন মডিউলটি ইনস্টল এবং সক্ষম করতে হবে । এই মডিউলটি দিয়ে আপনার ইতিমধ্যে বাল্ক অপারেশনগুলি সক্ষম (একটি বার অ্যাডমিন / সামগ্রী সক্ষম হয়ে গেলে) সহ একটি বাইরের বাইরে দর্শন রয়েছে। তারপর:

1) অ্যাডমিন / কাঠামো / একটি সম্পাদনা "প্রশাসন: নোড" ভিউতে যান

2) উপরে "অ্যাড -> পৃষ্ঠা" বোতামটি ব্যবহার করে দেখার জন্য একটি নতুন পৃষ্ঠা প্রদর্শন যুক্ত করুন

3) নতুন প্রদর্শনের জন্য একটি পাথ নির্দিষ্ট করুন: উদাহরণ প্রশাসক / সামগ্রী / কাস্টম

4) আপনার নির্বাচিত ক্ষেত্রের জন্য একটি নতুন ফিল্টার যুক্ত করুন: অপারেটরটিকে "এর মধ্যে একটি" নির্বাচন করুন এবং তারপরে আপনি মুছতে চান এমন সমস্ত বিকল্প নির্বাচন করুন

5) ভিউ সংরক্ষণ করুন

)) অ্যাডমিন / কন্টেন্ট / কাস্টম এ যান এখন আপনি সমস্ত সামগ্রী দেখতে পান যা আপনাকে বাল্ক সম্পাদনা করতে হবে (আপনার নির্বাচিত ক্ষেত্রের জন্য মান পরিবর্তন করুন)

)) সারণির বামে প্রথম চেকবক্সটি ক্লিক করে সমস্ত সারি নির্বাচন করুন (যদি একাধিক পৃষ্ঠা থাকে তবে একটি বোতামও নির্বাচন করুন যা "এই দৃশ্যে সমস্ত এক্স সারি নির্বাচন করুন" বলবে)

8) অপারেশন "পরিবর্তন মান" নির্বাচন করুন এবং "চালানো" টিপুন

9) আপনার নির্বাচিত ক্ষেত্রের জন্য, আপনি মুছে ফেলতে চান সেটি মুছে ফেলার জন্য একটি নতুন মান নির্বাচন করুন

10) যে নির্বাচন ক্ষেত্রের জন্য চেকবক্স নির্বাচন করুন

১১) Next ক্লিক করুন এবং আপনার কাজ শেষ হয়েছে


0

আপনার শ্রুপাল সমস্যাটি গভীরতর ডেটা সমস্যার উপর ভিত্তি করে বলে মনে হচ্ছে: বর্তমানে অবমূল্যায়নের তালিকার মানগুলি ব্যবহার করে এমন সত্তাগুলির কী হবে? এই প্রশ্নটি ত্রুটি বার্তার মূলে রয়েছে যা দ্রুপাল আপনাকে প্রেরণ করছে।

আপনার রাজ্য / অঞ্চল উদাহরণটি ঘুরে দেখুন। আপনার ক্লায়েন্ট বছরের পর বছর ধরে একই পদ্ধতিতে রাজ্য এবং অঞ্চলগুলির সাথে আচরণ করে এমন একটি সিস্টেম ব্যবহার করছে এবং একটি বিশাল নোড তৈরি করেছে যা রাজ্য এবং অঞ্চল উভয়ই অন্তর্ভুক্ত করে। তারপরে একদিন, যে শক্তিগুলি সিদ্ধান্ত নেবে যে অঞ্চলগুলিকে অন্যভাবে পরিচালনা করা দরকার এবং অঞ্চল নির্ধারণের জন্য ড্রপ-ডাউনকে আর অঞ্চল থাকতে হবে না। গ্রেট। সমস্ত অঞ্চল নোডের একটি তালিকা রেন্ডার করতে স্ট্যান্ডার্ড ফিল্টার ব্যবহার করে এবং ভিউ বাল্ক অপারেশনগুলি ব্যবহার করে তাদের সমস্ত অঞ্চলের মানগুলিতে পরিবর্তন করতে ... এমন কি ... কিছু 51 তম রাজ্যকে সম্ভবত বলা হয়? অঞ্চলগুলির ভাগ্য একটি অত্যন্ত গুরুতর প্রশ্ন। আপনার সমাধানটিতে অঞ্চলটির স্থিতি সংরক্ষণ বা স্থানান্তরিত করার জন্য একটি পদ্ধতি অবশ্যই অন্তর্ভুক্ত থাকতে হবে। 'টেরিটরি' নামে একটি নতুন তালিকা ক্ষেত্র তৈরি করতে আপনার প্রয়োজন হতে পারে

এই পরিবর্তনগুলি সম্পাদন করার জন্য আপনাকে ভিউ বাল্ক অপারেশন সহ বিধিগুলি ব্যবহার করতে হবে। আপনি যদি নিয়মাবলী সম্পর্কে বেশি কিছু না জানেন তবে দয়া করে তারা কীভাবে কাজ করে সে সম্পর্কে কিছুটা সময় নিন। বিধিগুলি আপনাকে ট্রিগার, শর্ত এবং ক্রিয়াকলাপের ভিত্তিতে তথ্য চালনার ক্ষমতা দেয়। বিধি সম্পর্কে জানার পরে, আপনি দেখতে পাচ্ছেন যে উত্তরগুলি আপনি খুঁজছেন তা স্বজ্ঞাতভাবে তাদের উপস্থাপন করবে। মূলত, আপনাকে একটি নিয়ম তৈরি করতে হবে, যা একটি বাল্ক অপারেশন দ্বারা চালিত হয়, যা সমস্ত অঞ্চলকে লক্ষ্যবস্তু করে এবং মুছে ফেলা, পুনরায় নিয়োগ, পুনরায় নামকরণ বা অন্যথায় তাদের তথ্যের মূল অংশ থেকে আলাদা করবে। বিধিটি অবশ্যই সেই একই সময়ে টেরিটরি রাজ্যকে কোনও উপায়ে সংরক্ষণ করতে সক্ষম হতে হবে, একই সময় রাজ্যের ড্রপডাউনটিকে 'অন্যান্য' বা 'এন / এ' স্থিতিতে সেট করে। এটি যা প্রয়োজন তা হতে পারে। তা না হলে ...

পুনরায় নিয়োগের কাজ শেষ হওয়ার পরে, মূল তালিকা ক্ষেত্রটি পরিবর্তন করতে এবং অঞ্চলটির নামগুলি সরিয়ে ফেলার জন্য এটি সাধারণ ক্রিয়াকলাপ হওয়া উচিত। তবুও, যদি সিস্টেমটি আপনাকে তালিকার পরিবর্তনের অনুমতি না দেয়, আপনার একটি নতুন তালিকা ক্ষেত্র তৈরি করতে হতে পারে, তারপরে বর্তমান রাষ্ট্রীয় সমস্ত মান পর্যালোচনা করতে এবং নতুন তালিকায় তাদের পুনরায় সাইন করতে ভিউজ বাল্ক অপারেশন এবং বিধিগুলি ব্যবহার করুন। প্রাসঙ্গিক সমস্ত নোডকে লক্ষ্য করতে এবং ক্ষেত্রের মানগুলির উপর ভিত্তি করে তাদের উপর কাজ করতে নিয়মগুলি ভিউজ বাল্ক অপারেশনের সাথে কাজ করতে পারে। কোনও নোডের একটি গ্রুপের জন্য বিদ্যমান তালিকা ক্ষেত্রের মানের ভিত্তিতে একটি নতুন তালিকা ক্ষেত্রের মান নির্ধারণ করা যখন আপনি বিধিগুলি ব্যবহার করেন তখন সহজ।

এছাড়াও মনে রাখবেন, যদি দ্রুপাল আপনাকে কোনও অপারেশনে সমস্যা দেয় তবে একটি কঠিন বিকল্প বিবেচনা করার আগে সর্বদা ক্যাশে ফ্লাশ করুন।


0

আমি ধরে নেব যে আপনার ক্লায়েন্টটি উত্তরাধিকার সূচীটিকে তার মূল মান ধরে রাখতে চায়, অর্থাত নির্বাচিত তালিকা পরিবর্তন করা কোনও কার্যকরভাবে পূর্ববর্তী কোনও ডেটা নষ্ট করে দেবে। যদি এটি উদ্বেগ না হয়, তবে অন্য যে কোনও উত্তর সম্ভবত কার্যকর হবে। তবে এটি যদি হয় তবে আপনি সেই ডেটা ইতিহাসটি বাদ না দিয়ে নির্বাচিত তালিকাটি সত্যই পরিবর্তন করতে পারবেন না। সাইটটিকে আরও কিছুটা ভবিষ্যত-প্রমাণ করার সময় আমি historicalতিহাসিক ডেটাগুলিতে মঞ্জুরি দেওয়ার জন্য অনেক সহজ রুট যেতে পারি - আমি ক্ষেত্রের অনুমতিগুলি ব্যবহার করার পরামর্শ দেব:

* স্থিতিশীল তথ্যের পরিবর্তে বিভাগের ব্যবহার করে সেই নির্বাচন তালিকার জন্য একটি নতুন ক্ষেত্র সেট আপ করুন

* বিদ্যমান নির্বাচিত তালিকার ভিউ হিসাবে ফিল্ডের অনুমতি নির্ধারণ করুন, তবে অ্যাডমিন ব্যতীত অন্য কারও দ্বারা সম্পাদনা করুন

এটির সাহায্যে পুরানো ক্ষেত্রটি দেখতে পারা যায় এবং অনুসন্ধানযোগ্য হবে (এটিকে কেবল উত্তরাধিকার হিসাবে প্রতিফলিত করে একটি নতুন শিরোনাম যুক্ত করুন) তবে সম্পাদনাযোগ্য নয়। এটি অবশ্যই কাস্টম অনুসন্ধান, ভিউ, ইত্যাদির উপর নির্ভর করে যা সামঞ্জস্য করার প্রয়োজন হতে পারে।

আমি এটিকে প্রস্তাব দিই (যতটা বেয়াদব লাগছে ততই অশুভ) কারণ সেই ডেটা সরিয়ে ফেলা, ইতিহাস সরিয়ে দেয় এবং এটি দীর্ঘমেয়াদে ধ্বংসাত্মক হয়ে উঠতে পারে। এমনকি আপনি সম্পাদনা নোডে পুরানো ক্ষেত্রটি লুকানোর জন্য সিএসএস এবং নতুন সামগ্রীর জন্য এটি লুকানোর জন্য একটি হুক ব্যবহার করতে পারেন (যেখানে এটির কোনও মান সেট নেই)। এইভাবে, এটি কেবলমাত্র সেই উত্তরাধিকার সূত্রের জন্য প্রদর্শিত হবে।

অবশ্যই, তারপরে আপনি পুরানো বাছাই তালিকা থেকে ডেটা অনুলিপি করার জন্য কাস্টম ওয়ান অফ অফ মডিউলটি দিয়ে আরও এক ধাপ এগিয়ে নিয়ে যেতে পারেন।


0

উদ্ধারের জন্য একটি সাধারণ ড্রাশ লিপি! আমরা ক্ষেত্রের ডেটা এবং ক্ষেত্রের পুনর্বিবেশন সারণীগুলি আপডেট করি এবং ম্যানুয়ালি ফিল্ড সেটিংস পরিবর্তন করার আগে পুরানো মানগুলি নতুনের সাথে প্রতিস্থাপন করি।

আমাদের বর্তমান ফিল্ড সেটিংসে যদি এরকম কিছু থাকে:

&date=today|today
&date=last2days|last2days

এবং নিম্নলিখিতটি দিয়ে এটি প্রতিস্থাপন করতে চান:

date=today|today
date=last2days|last2days

আমরা প্রথমে ড্রাশ স্ক্রিপ্টটি পরিচালনা করি এবং তারপরে অ্যাডমিন ইউআইতে ফিল্ড সেটিংস পরিবর্তন করি।

দ্রষ্টব্য: এই কোডটি মেশিনের নামযুক্ত ক্ষেত্রের জন্য field_foo_bar

    $field_name = 'foo_bar';

    print "for {$field_name}...\n";

    replace_field("&date=today", "date=today", $field_name);

    replace_field("&date=last2days", "date=last2days", $field_name);

    function replace_field($old_value, $new_value, $field_name, $entity_type='node') {
      print "Replacing {$old_value} with {$new_value}...\n";
      $data_count = replace_options_data_field($field_name, $entity_type, $old_value, $new_value);
      $revision_count = replace_options_revision_field($field_name, $entity_type, $old_value, $new_value);
      print $data_count + $revision_count . " entries replaced.\n";
    }

    function replace_options_data_field($field_name, $entity_type, $old_value, $new_value) {
      $num_updated = db_update('field_data_field_' . $field_name)
        ->fields(array(
                   'field_' . $field_name . '_value' => $new_value,
                 ))
        ->condition('entity_type', $entity_type)
        ->condition('field_' . $field_name . '_value', $old_value)
        ->execute();
      return $num_updated;
    }

function replace_options_revision_field($field_name, $entity_type, $old_value, $new_value) {
  $num_updated = db_update('field_revision_field_' . $field_name)
    ->fields(array(
               'field_' . $field_name . '_value' => $new_value,
             ))
    ->condition('entity_type', $entity_type)
    ->condition('field_' . $field_name . '_value', $old_value)
    ->execute();
  return $num_updated;
}

0

আমি কেনরবের দ্বিতীয় পরামর্শটি ব্যবহার করেছি এবং এটি একটি ড্রুপাল 7.52, প্রোফাইল 2 7.x-1.3 ক্ষেত্রে মানগুলির তালিকা আপডেট করতে কাজ করেছে। সুতরাং আপনি যদি ড্রুপাল সতর্কতা পেয়ে যাচ্ছেন: "অনুমোদিত মান তালিকা: বর্তমানে ব্যবহারের সময় কিছু মান সরিয়ে ফেলা হচ্ছে।" নিম্নলিখিতটি আমাকে ডাটাবেসে অপসারণ বা প্রতিস্থাপন না করে (প্রোফাইল 2) ক্ষেত্র থেকে মানগুলি সরিয়ে নেওয়ার অনুমতি দেয়।

ড্রুপাল কোরের মূল ডিরেক্টরিতে মডিউল নামে একটি ফোল্ডার রয়েছে এবং সম্পাদনা করার জন্য ফাইলটি এখানে রয়েছে: মডিউল / ক্ষেত্র / ক্ষেত্র.মডিউল। এটি একটি দুর্দান্ত ফাইল, মানগুলি আপডেট করার সময় আপনার অবশ্যই পরিবর্তনগুলি অবশ্যই পুরোপুরি ফিরিয়ে আনতে হবে। আমি অফলাইনে সাইটটি নিয়েছি, অস্থায়ীভাবে নিম্নলিখিত কোড ব্লককে (ড্রুপাল রুট) / মডুলিউস / ফিল্ড / ক্ষেত্রের মধ্যে প্রতিস্থাপন করেছি mod

function field_has_data($field) {
  $query = new EntityFieldQuery();
  $query = $query->fieldCondition($field)
    ->range(0, 1)
    ->count()
    // Neutralize the 'entity_field_access' query tag added by
    // field_sql_storage_field_storage_query(). The result cannot depend on the
    // access grants of the current user.
    ->addTag('DANGEROUS_ACCESS_CHECK_OPT_OUT');

  return (bool) $query
    ->execute() || (bool) $query
    ->age(FIELD_LOAD_REVISION)
    ->execute();
}

একেবারে সাথে

function field_has_data($field) { 
    return FALSE; // hack 
    $query = new EntityFieldQuery();
}

এবং দ্রুপাল অভিযোগ করা বন্ধ করে দিয়ে আমি তালিকাটি পরিবর্তন করতে সক্ষম হয়েছি। (আমার ক্ষেত্রে, বিশ্ববিদ্যালয়টি যে মূল্যবোধগুলি ছেড়ে গেছে সেগুলির তালিকায় এটি অনুষদ, তবে এখনও তাদের পরামর্শদাতা, পরামর্শদাতা, ইত্যাদি হিসাবে শিক্ষার্থীদের রেকর্ডের সাথে যুক্ত)

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