Drupal Forms API। भाग 1 - द्रुपाल 6 के लिए

छवि

यह लेख उन लोगों के लिए है जो पहले से ही सबसे सरल मॉड्यूल लिखने से परिचित हैं, और FAPI ( Drupal Forms API ) "उंगलियों पर" के सिद्धांतों को समझना चाहते हैं। इसमें, हम Drupal फॉर्म प्रोग्रामिंग इंटरफ़ेस की मूल बातों का विश्लेषण करेंगे और एक छोटा मॉड्यूल बनाएंगे, जो AHAH नामक Drupal ajax इंजन का उपयोग करके दर्ज किए गए नाम को लौटाता है। बस इस सरल फॉर्म के लिए हमें FAPI की आवश्यकता होगी।



इस विषय पर एक लेख क्यों? एक नेटवर्क में, और विशेष रूप से Habré पर, FAPI के साथ मॉड्यूल के कुछ उदाहरण हैं। मेरे लिए अतीत में यह समझना एक मुश्किल था कि फॉर्म कैसे बनाए जाते हैं - और इस तरह की व्याख्या "उंगलियों पर" मेरे लिए बहुत उपयोगी होगी। मैं अतीत में नहीं लौट सकता - लेकिन मैं उन लोगों की मदद कर सकता हूं जो समान कठिनाइयों का सामना कर रहे हैं।



आलेख Drupal के 6.x संस्करण का अनुपालन करता है। मैंने आलेख में समानांतर में संस्करण 7 को कवर करने की योजना बनाई है - लेकिन एपीआई में अंतर महत्वपूर्ण है, इसलिए मैं लेख के भाग 2 में एपीआई के संस्करण 7 के लिए समान कार्यक्षमता का वर्णन करूंगा।







FAPI रूपों का उपयोग क्यों करें?



स्वाभाविक रूप से, आप प्रपत्र को HTML के रूप में लिख सकते हैं और बस इसे पृष्ठ पर प्रिंट कर सकते हैं, या इसे शामिल फ़ाइल के रूप में मॉड्यूल में संलग्न कर सकते हैं। लेकिन अगर आप FAPI का उपयोग करते हैं, तो निम्नलिखित लाभ दिखाई देंगे:

  1. प्रपत्र सत्यापन के साधनों का उपयोग करने में सक्षम होगा, Drupal की थीमिंग, इसका AHAH सिस्टम (AJAX, Drupal के संस्करण 7 के साथ शुरू)।
  2. टी () फ़ंक्शन के माध्यम से अनुवाद इंटरफ़ेस के माध्यम से चलाकर फॉर्म का अनुवाद किया जा सकता है।
  3. हुक के माध्यम से अन्य मॉड्यूल के संपादन के लिए एक फॉर्म प्रदान किया जा सकता है।
  4. और, महत्वपूर्ण रूप से, फॉर्म को ड्रुपल रूपों के सामान्य नियमों के अनुसार स्वरूपित किया जाएगा, जो इसके बाद की थीम के लिए इसे अधिक "मूल" बना देगा।




सरलतम मॉड्यूल बनाएं



हमारे मॉड्यूल फास्टकनेक्ट का नाम दें। फ़ोल्डर / साइट्स / सभी / मॉड्यूल / फास्टकनेक्ट बनाएं - यह हमारे मॉड्यूल का रूट फ़ोल्डर होगा। इसमें, दो फाइलें बनाएं - fastcontact.info और fastcontact.module - यह पर्याप्त होगा।



Ininfo में - फ़ाइल लिखें:



; ""   name = Fast Contact ;     description = Test module for learning FAPI ;   version = "6.x-1.0" ;     core = "6.x" ; ""   project = "fastcontact" ;     package = "Other" ;    datestamp = "1294001844"
      
      







अब, हम फॉर्म का वर्णन करने वाले कोड को पास कर सकते हैं।



एफएपीआई फॉर्म के फार्म और तत्व



प्रत्येक प्रपत्र को एक फ़ंक्शन के रूप में वर्णित किया गया है। फ़ंक्शन प्रपत्र तत्वों के साथ एक सरणी देता है। सरणी का प्रत्येक तत्व एक प्रपत्र तत्व से मेल खाता है, जिसमें एक नाम है, और इस तत्व की विशेषताओं का एक सरणी है। तत्वों और उनकी विशेषताओं की एक सारांश तालिका Drupal API वेबसाइट पर समीक्षा के लिए उपलब्ध है।



एक टेक्स्ट बॉक्स के साथ एक सरल फ़ॉर्म बनाएं।



 function fc_form() { $form = array(); //   'name' $form['name'] = array( //   '#type' => 'textfield', //    '#description' => t(' '), //   '#size' => '25', ); //    'submit' $form['submit'] = array( //   Submit (  ) '#type' => 'submit', //    '#value' => 'Submit', //  AHAH (   6) '#ahah' => array( //   click (  JQuery) 'event' => 'click', // ,      'path' => 'fastcontact/js', //      'wrapper' => 'fc-form', //    ( JQuery) 'method' => 'append', //  JQuery    'effect' => 'fade', //   'progress' => array('type' => 'throbber'), ), ); return $form; }
      
      







इस प्रकार, एक फॉर्म एक टेक्स्ट बॉक्स और एक सबमिट बटन के साथ बनाया जाएगा जो Ajax (AHAH) पर चलता है।



प्रसंस्करण का अनुरोध करें



अब, हमें ANAN अनुरोध को संसाधित करने के लिए कार्यक्षमता बनाने की आवश्यकता है। ऐसा करने के लिए, आपको अहा तत्व की पथ विशेषता में निर्दिष्ट पथ बनाने की आवश्यकता है (जिस रूप में हमने पथ 'फास्टकनेक्ट / js' निर्दिष्ट किया है)। यह हुक_मेनू () के माध्यम से किया जाता है।



Drupal मेनू मॉड्यूल का उपयोग तब भी करता है जब कुछ भी "मेनू" में प्रवेश नहीं करता है। लेकिन यह पृष्ठों के पथ संग्रहीत करता है। मेनू आइटम एक सरणी के माध्यम से भी बनाए जाते हैं।



 /** *  hook_menu() */ function fastcontact_menu() { //      $items['fastcontact/js'] = array ( // ,   ""  'page callback' => 'fastcontact_ajax', //      'access arguments' => array('access content'), //        'type' => MENU_CALLBACK, ); return $items; }
      
      







हमने मेनू आइटम के प्रकार के रूप में MENU_CALLBACK को निर्दिष्ट किया, क्योंकि हम नहीं चाहते कि साइट मेनू के लिंक के बाद इस मार्ग का अनुसरण किया जाए (यह अनुरोध को संसाधित करने का तरीका है)।



हमारा अनुरोध प्रसंस्करण फ़ंक्शन सीधे रूपों के काम से संबंधित नहीं है, इसलिए, शोधन के बिना, हम केवल यह दिखाने के लिए AHAH के माध्यम से वापस लौटाते हैं कि मॉड्यूल काम कर रहा है।



 /*   */ function fastcontact_ajax() { //     $_POST //         check_plain() $name=check_plain($_POST['name']); //              (  fc-form) $output = '   <i>'.$name.'</i>.'; //         drupal_json(array('status' => TRUE, 'data' => $output)); }
      
      







प्रपत्र प्रदर्शन



अब, यह हमारे लिए है कि हम फॉर्म को जमा करें और इसके प्रतिपादन के लिए आवश्यक सभी कुछ करें। सबसे पहले, हम एक फ़ंक्शन की रचना करेंगे जो हमारे फॉर्म को प्रदर्शित करेगा। इसके लिए, drupal_get_form () का उपयोग किया जाएगा।



 /*   */ function render_fc_form() { //      $out = drupal_get_form('fc_form'); return $out; }
      
      







हम हुक_ब्लॉक () के माध्यम से एक ब्लॉक बना सकते हैं - लेकिन इसे जटिल नहीं करने के लिए, हम बस एक इनपुट फिल्टर के साथ एक ब्लॉक बना सकते हैं और php कोड के माध्यम से फॉर्म प्रदर्शित कर सकते हैं:



  echo render_fc_form();
      
      







मॉड्यूल का अपेक्षित परिणाम



यदि कोड सफलतापूर्वक काम करता है, तो वाक्यांश "आपने एक नाम दर्ज किया है ..." इनपुट फ़ॉर्म के तहत दिखाई देगा, जहां ellipsis के बजाय आपके द्वारा दर्ज किया गया नाम होगा, पृष्ठ को फिर से लोड किए बिना।



All Articles