क्या "system_settings_form" वूडू है?


8

एक मित्र ने मुझे एक फॉर्म के लिए कॉन्फ़िगरेशन फ़ाइल में कार्रवाई में सिर्फ system_settings_form दिखाया।

प्रश्न में कोड इस तरह दिखता है (सरलीकृत)।

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);
}

system_settings_form सबमिट बटन में जोड़ता है और चर को सहेजते हुए फ़ॉर्म सबमिट करता है। इसमें "रीसेट टू डिफॉल्ट" बटन भी जोड़ा गया है - जो सभी वैरिएबल को डिफॉल्ट पर रीसेट करता है।

मैंने मूल रूप से अनुमान लगाया कि यह क्या करता है क्योंकि वहाँ से बाहर बहुत सारे दस्तावेज नहीं हैं और मेरे दोस्त को यह नहीं पता है कि यह वास्तव में क्या करता है। मेरा सवाल यह है कि यह चर / संचय को कैसे सहेजता / संवारता है? क्या मैं सिर्फ एक सरणी से नहीं गुजर रहा हूं?

इसके अलावा system_settings_form में कोई अन्य जादू है जिसके बारे में मुझे पता होना चाहिए?

जवाबों:


14

देखें system_settings_form और system_settings_form_submit कार्यान्वयन विवरण के लिए। Drupal 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:

कॉन्फ़िगरेशन जोड़ें सेव करें बटन सबमिट करें और system_settings_form_submit फ़ंक्शन पर कॉलबैक सबमिट करें।

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.'));
}

सभी फॉर्म एलिमेंट्स के माध्यम से परिवर्तन करता है और प्रत्येक फॉर्म एलिमेंट के लिए फॉर्म एलिमेंट की के रूप में कुंजी और वैल्यू सेट करता है क्योंकि यूजर ने फॉर्म फॉर्म वैल्यू को $ form_state ['मान'] का उपयोग करके पढ़ा है।

तो, यह सबमिट हैंडलर के साथ एक रूप है जो चर_सेट फ़ंक्शन का उपयोग करके सभी फॉर्म वैल्यू के लिए चर सेट करता है।


5
अच्छे खर्च। यदि आप "प्रत्येक तत्व तत्व के साथ कुंजी के रूप में तत्व तत्व कुंजी" के साथ भ्रमित हैं, तो उसका क्या मतलब है कि ऊपर दिए गए आपके उदाहरण में, $ फॉर्म ['super_secret_password'] Drupal को variable_set ('super_sretret_password', ...) को कॉल करेगा। क्योंकि system_settings_form_submit आपके फॉर्म की सरणी कुंजी ('super_secret_password') से चर का नाम लेता है।
greg_1_anderson

1
यह मददगार है। Api.drupal.org क्यों नहीं बता सकता है कि वह सादे अंग्रेजी में क्या करता है। इसके बजाय यह सिर्फ कोड देता है ... इसलिए सारांश में, मेरे क्षेत्र की कुंजियों का उपयोग करते हुए, वूडू नहीं।
कोमी

1
मुझे लगता है कि यह ध्यान देने योग्य है कि आपको बड़े चरों को संग्रहीत करने के लिए इसका उपयोग नहीं करना चाहिए क्योंकि यह हर पृष्ठ अनुरोध के लिए स्मृति में रहेगा, कोई फर्क नहीं पड़ता कि इसके लिए एक प्रत्यक्ष चर_गेट था या नहीं। वे सभी एक बार स्मृति में संचित होते हैं। इसके अलावा, नियमित रूप से जमा और मान्य हैंडलर समस्या के बिना काम करेंगे। बेझिझक उन्हें जोड़ें।
आयुष
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.