"সিস্টেম_সেটিংস_ফর্ম" ভুডু?


8

একটি বন্ধু আমাকে একটি ফর্মের জন্য একটি কনফিগারেশন ফাইলের ক্রিয়ায় সিস্টেম_সেটিংস_ফর্মটি দেখিয়েছে।

প্রশ্নের কোডটি দেখতে এরকম (সরলিকৃত)।

function my_module_generateAdminForm($form){
  $form = array();
  $form['super_secret_password'] = array(
    '#type' => 'textfield',
    '#title' => t('Headline'),
    '#default_value' => variable_get('super_secret_password','password'),
  );
  system_settings_form($form);
}

সিস্টেম_সেটিংস_ফর্ম জমা বোতামগুলিতে যোগ করে এবং ভেরিয়েবলগুলি সংরক্ষণ করে ফর্ম জমা দেওয়ার কাজ পরিচালনা করে। এটি একটি "ডিফল্টে রিসেট করুন" বোতামটিও যুক্ত করে - যা সমস্ত ভেরিয়েবলকে ডিফল্টর মধ্যে পুনরায় সেট করে।

আমি এটি মূলত অনুমান করেছি যে এটি কী করে কারণ সেখানে খুব বেশি ডকুমেন্টেশন নেই এবং আমার বন্ধুটি জানে না এটি ঠিক কী করে। আমার প্রশ্ন হ'ল এটি সংরক্ষণ / পুনরায় সেট করতে পরিবর্তনগুলি কীভাবে জানতে পারে? আমি কি শুধু অ্যারে পাস করছি না?

এছাড়াও সিস্টেম_সেটিংস_ফর্মে অন্য কোনও যাদু আছে যা সম্পর্কে আমার জানা উচিত?

উত্তর:


14

বাস্তবায়ন বিশদের জন্য সিস্টেম_সেটিংস_ফর্ম এবং সিস্টেম_সেটিংস_ফর্ম_সামিট দেখুন । ড্রুপাল 7-এ রিসেট টু ডিফল্ট বোতামটি সিস্টেম সেটিংস ফর্ম থেকে সরানো হয়েছে।

function system_settings_form($form) {
  $form['actions']['#type'] = 'actions';
  $form['actions']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save configuration'),
  );

  if (!empty($_POST) && form_get_errors()) {
    drupal_set_message(t('The settings have not been saved because of the errors.'), 'error');
  }
  $form['#submit'][] = 'system_settings_form_submit';
  // By default, render the form using theme_system_settings_form().
  if (!isset($form['#theme'])) {
    $form['#theme'] = 'system_settings_form';
  }
  return $form;
}

সিস্টেম_সেটিংস_ফর্ম:

অ্যাডস সেভ কনফিগারেশন জমা দিন বোতামটি জমা দিন এবং সিস্টেম_সেটিংস_ফর্ম_সুবিট ফাংশনে কলব্যাক জমা দিন।

system_settings_form_submit:

function system_settings_form_submit($form, &$form_state) {
  // Exclude unnecessary elements.
  form_state_values_clean($form_state);

  foreach ($form_state['values'] as $key => $value) {
    if (is_array($value) && isset($form_state['values']['array_filter'])) {
      $value = array_keys(array_filter($value));
    }
    variable_set($key, $value);
  }

  drupal_set_message(t('The configuration options have been saved.'));
}

সমস্ত ফর্ম উপাদানগুলির মধ্য দিয়ে আইট্রেট করে এবং ফর্ম উপাদান কী হিসাবে প্রতিটি ফর্ম উপাদানগুলির জন্য ভেরিয়েবল সেট করে এবং submitted form_state ['মান'] ব্যবহার করে ব্যবহারকারী জমা দেওয়া ফর্ম উপাদানটির মান হিসাবে মান দেয়

সুতরাং, এটি হ্যান্ডলারের সাথে জমা দেওয়া একটি ফর্ম যা ভ্যারিয়েবল_সেট ফাংশন ব্যবহার করে সমস্ত ফর্মের মানগুলির জন্য ভেরিয়েবল সেট করে।


5
ভাল ব্যাখ্যা। আপনি যদি "ফর্ম উপাদান কী হিসাবে প্রতিটি ফর্ম উপাদানটি কী দ্বারা" বিভ্রান্ত হন তবে তার অর্থ হ'ল উপরের উদাহরণে example ফর্ম ['সুপার_সরেট_প্যাসওয়ার্ড'] ড্রুপালকে ভ্যারিয়েবল_সেট ('সুপার_সরেট_প্যাসওয়ার্ড', ...) কল করার কারণ করবে, কারণ সিস্টেম_সেটিংস_ফর্ম_সুবমিট আপনার ফর্মের অ্যারে কী ('সুপার_সেক্রেট_প্যাসওয়ার্ড') থেকে ভেরিয়েবলের নাম নেয়।
গ্রেগ_এন্ডারসন

1
এটি সহায়ক। কেন api.drupal.org কেবল এটি সরল ইংরাজীতে ব্যাখ্যা করে না। পরিবর্তে এটি কেবল কোড দেয় ... সুতরাং সংক্ষেপে ভুডু নয়, আমার ফিল্ড কীগুলি ব্যবহার করে।
কোমি

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