2008-09-13 9 views
5

मैं फिलहाल PHP में फॉर्म बनाने के लिए HTML_QuickForm के साथ खेल रहा हूं। ऐसा लगता है कि मेरे स्वयं के जावास्क्रिप्ट को सम्मिलित करना या कुछ तत्वों के प्रदर्शन और समूह को अनुकूलित करना मुश्किल है।PHP QuickForm के लिए वैकल्पिक?

क्या क्विकफॉर्म के कोई विकल्प हैं जो अधिक लचीलापन प्रदान कर सकते हैं?

उत्तर

5

यदि आपको फॉर्म तत्वों में जावास्क्रिप्ट डालना मुश्किल लगता है, तो Prototype या jQuery जैसे जावास्क्रिप्ट ढांचे का उपयोग करने पर विचार करें। वहां, आप फॉर्म नियंत्रण में ईवेंट हैंडलिंग इंजेक्शन करने के कार्य को केंद्रीकृत कर सकते हैं।

इसके द्वारा, मेरा मतलब है कि आपको ईवेंट फॉर्म हैंडलर को HTML फॉर्म कोड में डालने की आवश्यकता नहीं होगी। इसके बजाय, आप उन घटनाओं को कहीं और से पंजीकृत करते हैं। उदाहरण के लिए, प्रोटोटाइप में आप कुछ इस तरह लिखने में सक्षम हो जाएगा:

$('myFormControl').observe('click', myClickFunction) 

इसके अलावा another question के जवाब पर एक नजर है।

/संपादित करें: बेशक, आप HTML_QuickForm का उपयोग करके कस्टम तत्वों और इस प्रकार ईवेंट हैंडलर को फॉर्म तत्वों में भी डाल सकते हैं। हालांकि, उपर्युक्त तरीका बेहतर है।

+0

सुझाव के लिए धन्यवाद। यह बहुत उपयोगी लगता है और मैं निश्चित रूप से इसे जांच लेंगे। – Readonly

5

मुझे पैकेज Zend Framework पैकेज को कणिका लचीला होने के लिए मिला है। आम जावास्क्रिप्ट फॉर्म हेल्पर्स को तेजी से कार्यान्वित करने के लिए इस घटक का उपयोग Zend_Dojo के साथ भी किया जा सकता है। हालांकि, जब आप लाइब्रेरी का उपयोग करते हैं तो यह घटक अज्ञेयवादी होता है, लेकिन डोजो को नाइटिव का समर्थन करता है। घटक समूह, बहु पृष्ठ रूपों, कस्टम सजावट करने वालों, वैधताओं और अन्य सुविधाओं को भी बहुत लचीला बनाने की अनुमति देता है।

1

मैं दूसरा ज़ेंड_फॉर्म करूंगा;

[main] 
vessel.form.method = "post" 

vessel.form.elements.name.type = "text" 
vessel.form.elements.name.name = "name" 
vessel.form.elements.name.options.label = "Name: " 
vessel.form.elements.name.options.required = true 

vessel.form.elements.identifier_type.type = "select" 
vessel.form.elements.identifier_type.name = "identifier_type" 
vessel.form.elements.identifier_type.options.label = "Identifier type: " 
vessel.form.elements.identifier_type.options.required = true 
vessel.form.elements.identifier_type.options.multioptions.IMO Number = "IMO Number"; 
vessel.form.elements.identifier_type.options.multioptions.Registry organisation and Number = "Registry organisation and Number"; 
vessel.form.elements.identifier_type.options.multioptions.SSR Number = "SSR Number"; 

vessel.form.elements.identifier.type = "text" 
vessel.form.elements.identifier.name = "identifier" 
vessel.form.elements.identifier.options.label = "Identifier: " 
vessel.form.elements.identifier.options.required = true 
vessel.form.elements.identifier.options.filters.lower.filter = "StringToUpper" 

vessel.form.elements.email.type = "text" 
vessel.form.elements.email.name = "email" 
vessel.form.elements.email.options.label = "Email: " 
vessel.form.elements.email.options.required = true 

vessel.form.elements.owner_id.type = "hidden" 
vessel.form.elements.owner_id.name = "owner_id" 
vessel.form.elements.owner_id.options.required = true 

; submit button 
vessel.form.elements.submit.type = "submit" 
vessel.form.elements.submit.name = "Update" 
vessel.form.elements.submit.option.value = "Update" 
4

मैं OnLamp के लिए इस बारे में एक लेख लिखा था: यह एक उत्कृष्ट आरं शैली कार्यान्वयन है कि आप बहुत जल्दी एक रूप को परिभाषित करने की अनुमति देता है Autofilled PHP Forms

के साथ मेरा मांस HTML_QuickForm और Zend_Form और अन्य सभी फार्म ढांचे को संभालने के लिए मुझे लगता है कि वे मानते हैं कि आप फॉर्म उत्पन्न करने के लिए कोड लिखेंगे। लेकिन यह मेरी विकास प्रक्रिया से मेल नहीं खाता, जहां मैं पृष्ठ के लुक (एचटीएमएल टेम्पलेट्स के माध्यम से निर्दिष्ट) से शुरू करूंगा और इसमें कार्यक्षमता जोड़ूंगा।

दुनिया के मेरे विचार में, प्रपत्र हैंडलिंग करने पर निर्भर करता:

  1. डेटा है कि (आमतौर पर एक डेटाबेस से) के रूप में जाना चाहिए शुरू करने के लिए लाई जा रही है।
  2. फ़ॉर्म के लिए HTML कोड प्राप्त करना (आमतौर पर एक टेम्पलेट)।
  3. एक साथ 1 और 2 मुस्कुराते हुए, और परिणाम आउटपुट।
  4. सबमिट किए गए फॉर्म डेटा प्राप्त करना और उसे सत्यापित करना।
  5. त्रुटि संदेशों और अमान्य डेटा के साथ फ़ॉर्म को फिर से प्रदर्शित करना, या
  6. बधाई प्रदर्शित करना-आपका-डेटा-था-ठीक पृष्ठ।

fillInFormValues ​​() 2, 3, और 5 वास्तव में आसान बनाता है।

+0

मेरे द्वारा +1। मैं आपसे पूरी तरह से सहमत हूं और वास्तव में अपने fillInFormValues ​​() वर्ग की तरह दिखता हूं। – da5id

1

ज़ेंड_फॉर्म के साथ अपने फॉर्म के साथ दृष्टि से शुरू करना पूरी तरह से संभव है, और उसके बाद बैकवर्ड कार्य करें।,

<?=$this->element->title->renderViewHelper()?> 

इस दृष्टिकोण के साथ जा रहे हैं आप कर सकते हैं:

यह सब सज्जाकार को दूर करने और उन्हें एक ViewScript डेकोरेटर

$this->form->setDecorators(array(array('ViewScript', array('viewScript' => 'forms/aform.phtml')))); 

साथ और उस में जगह आप कुछ इस तरह करना होगा viewscript द्वारा किया जाता है मूल रूप से आप जो कुछ भी फॉर्म के साथ चाहते हैं वह करें।

ज़ेंड_फॉर्म के बारे में एक और बड़ी बात यह है कि आप कस्टम तत्व बना सकते हैं जो उन में अन्य सामान को समाहित कर सकते हैं। उदाहरण के लिए, आपके पास एक तत्व हो सकता है जो टेक्स्टरेरा को आउटपुट करता है और फिर कुछ जावास्क्रिप्ट को इसे WYSIWYG क्षेत्र में बदलने के लिए करता है।

0

मैं वास्तव में इसके बारे में कुछ भी नहीं कह सकता लेकिन दूसरे दिन, मैं clonefish फॉर्म लाइब्रेरी में भाग गया। यह मेरी बुकमार्क सूची में "बाद में इसे देखें" के रूप में समाप्त होने के लिए पर्याप्त आशाजनक लग रहा था।

संबंधित मुद्दे