2009-06-09 13 views
11

लोग,PHP में जेनेरिक घोषणात्मक अभिव्यक्ति बिल्डर

मैं PHP5 यूआई का एक टुकड़ा है कि मैं यकीन है कि आवेदनों की एक गुच्छा के लिए आम है कर रहा हूँ निर्माण करने के लिए देख रहा हूँ। असल में, यह एक अभिव्यक्ति बिल्डर है कि उपयोगकर्ताओं को तार्किक ऑपरेटरों (और/या) के माध्यम से संयुक्त भाव निर्दिष्ट करने के लिए अनुमति देता है है, इस तरह:

  • FieldX> 3 और फील्डी = 5
  • फील्डी = "बॉब" और FieldZ नहीं है अशक्त
  • FieldX> '2007/05/23' या (फील्डी = 5 और फील्डी रिक्त नहीं है)

आदर्श रूप में, इस तरह एक प्रणाली पैरामीटर की सूची निर्दिष्ट करने के लिए एक प्रोग्रामर के रूप में मुझे अनुमति होगी उपयोगकर्ता प्रत्येक के लिए (कॉलम) और डेटा प्रकार चुन सकता है। यह अभिव्यक्तियों को परिभाषित करने के लिए एक अच्छा, उपयोगकर्ता के अनुकूल इंटरफेस भी प्रदान करेगा - मैं एक टेबल की तरह कुछ कल्पना कर रहा हूं, जहां प्रत्येक पंक्ति में कई पिकर्स हैं:

[कॉलम] [हालत] [मूल्य] [AND/OR ] [कॉलम] [हालत] [मूल्य] [AND/OR] ...

क्या आप ऐसे ओपन-सोर्स घटक के बारे में जानते हैं जो ऐसा कुछ करता है? या शायद इस तरह की कार्यक्षमता का एक हिस्सा?

उत्तर

12

सावधानी का एक शब्द।इन प्रकार के सामान्य अभिव्यक्ति बिल्डरों को आम तौर पर विभिन्न प्रकार की उपयोगकर्ता समस्याओं के उत्कृष्ट समाधान के रूप में माना जाता है। सोच इन पंक्तियों के साथ जाने के लिए जाता है:

  • उपयोगकर्ता इन सभी विभिन्न रिपोर्टों चाहता
  • कोई रास्ता नहीं हम उन्हें एसक्यूएल पहुँच दे रहे हैं (वे इसे समझ सकते हैं, भले ही)
  • हम नहीं है नहीं है इन सभी कस्टम रिपोर्टों को लिखने का समय
  • इसलिए, मैं विशिष्ट वाक्यविन्यास, तालिकाओं और फ़ील्ड को जानने के बिना प्रश्न लिखने का एक आसान तरीका बनाउंगा।

यह आवश्यक रूप से एक बुरा विचार नहीं है, लेकिन क्या हम अपनी कंपनी में पाया है कि गैर-टेकी उपयोगकर्ताओं आश्चर्य की बात समझने में परेशानी होती है और इमारत भाव ands के एक समूह या ओआरएस के एक समूह से कहीं अधिक जटिल है। कार्यक्रमकारों को समझने से पहले हमारे लिए प्रोग्रामर को समझना मुश्किल है, क्योंकि हम में से अधिकांश को शायद सीखने से पहले बुलियन तर्क की अंतर्ज्ञानी समझ थी।

मैं अनुशंसा करता हूं कि आप उन्हें जो भी अभिव्यक्ति चाहते हैं उसे बनाने के लिए उन्हें पूर्ण लचीलापन देने की कोशिश न करें, और इसके बजाय आप एक यूआई को एक साथ रख दें जो आपको प्रोग्रामर को बैक एंड पर कुछ और जटिल परिभाषित करने देता है लेकिन उपयोगकर्ता को सरल विकल्प देता है सामने के अंत में। जाहिर है, यह करने से आसान कहा जाता है।

याद रखें - कभी-कभी अंतिम उपयोगकर्ताओं के लिए कठिनाई यह तथ्य नहीं है कि उन्हें अपने विचार को व्यक्त करने के लिए सही वाक्यविन्यास नहीं पता है। अक्सर ऐसा इसलिए होता है क्योंकि वे यह भी नहीं जानते कि कैसे अपने विचारों को एक स्पष्ट रूप से तैयार करना है रास्ता, भले ही उन्हें ऐसा करने का एक आसान तरीका प्रदान किया गया हो।

नोट: मैं नहीं कह रहा हूं कि अंतिम उपयोगकर्ता हमेशा मूर्ख होते हैं - बस उनके दिमाग हमारे पागल डेवलपर्स से अलग तरीके से काम कर सकते हैं।

+0

चला रहा हूं यह एक महान, महान बिंदु है। ज्यादातर लोग निर्णय पेड़ के मामले में नहीं सोचते हैं। –

-5

smarty का उपयोग करने का प्रयास क्यों न करें जो एक टेम्पलेट इंजन है। आपको बस उपयोगकर्ता इनपुट प्राप्त करने और पार्स करने की आवश्यकता है।

अब जब मैं सोच रहा हूं, तो किसी भी तरह से इंजेक्शन से बचने के लिए उपयोगकर्ता इनपुट की जांच करने की आवश्यकता होगी।

0

मुझे लगता है कि यह सामान्य रूप से PHP से यूआई से अधिक संबंधित है। आप बेहतर ढंग से अपने प्रश्न को पीछे हटाना चाहते हैं। शायद आप इन परिभाषाओं को PHP में पार्स करना चाहते हैं, इस मामले में मैं preg_replace_callback का उपयोग करने का सुझाव दूंगा।

0

मैं ऑब्जेक्ट उन्मुख क्वेरी मॉडल बनाकर शुरू करूंगा। उदाहरण के लिए। Criteria-objects। अगला कदम तब एक यूआई लिखना है जो इस मॉडल संरचना में हेरफेर की अनुमति देता है।

0

मैंने हाल ही में अपने द्वारा इस तरह की कार्यक्षमता की है और, आईएमएचओ, अपने स्वयं के कार्यान्वयन को लिखना आसान है।

+0

क्या यह PHP में था? अपने कुछ कोड पोस्ट करने की देखभाल? धन्यवाद – alex

+0

हां, पीएचपी। असल में यह लंगड़ा और सीधा था। $ नियम = सरणी ( 'फील्ड' => 'नाम', समानता 'मूल्य' = 'जॉन *', 'bit_operation के लिए' कार्रवाई '=>' eq ', // परीक्षण: यहाँ शासन संरचना है '=>' और '// इस स्थिति के बीच जुड़ें और अगले } नियम सत्र में सरणी में सहेजे गए थे और SQL क्वेरी बिल्डिंग फ़ंक्शन द्वारा उपयोग किया गया था। कोई कक्षा नहीं, ओओपी नहीं - बस यह :) –

+0

Arrgh, कोई कोड संरचना नहीं है मुझे। –

1

मुझे लगता है कि यह एक बहुत ही रोचक विचार है। क्या आप इस परियोजना पर व्यक्तिगत उपयोग या काम के माध्यम से काम करने की योजना बना रहे हैं?

यदि आप व्यक्तिगत रूप से इस परियोजना पर काम करने की योजना बना रहे हैं, तो शायद आपको इसे स्वयं लिखना चाहिए और इसे ओपन सोर्स प्रोजेक्ट में बदलना चाहिए। ऐसा लगता है कि इस क्षेत्र में पहले से ही कुछ रुचि है और यह एक अच्छा सीखने का अनुभव होगा।

अन्यथा, मैं देख सकता हूं कि इस तरह की किसी चीज़ में कंपनी को मूल्य कैसे मिल सकता है। यह प्रोग्रामर को एक और उपयोगिता प्रदान करेगा जो उन्हें अपनी नौकरी को थोड़ा आसान बनाने और लंबी अवधि में लाभांश का भुगतान करने में मदद कर सकता है।

किसी भी तरह से, यह प्रोजेक्ट जीत गया है। आप बहुत कुछ सीखेंगे, और कुछ ऐसा तैयार करेंगे जो अन्य लोगों को उपयोगी लगे।

1

यह बिल्कुल एक घटक नहीं है, लेकिन आप इस प्रकार की कार्यक्षमता के ठोस PHP कार्यान्वयन के लिए Shopping Cart rule builder in Magento के नियम टैब पर एक नज़र डाल सकते हैं। इसे ई-कॉमर्स की ओर अनुकूलित किया गया है, इसलिए यह सामान्य डेटाबेस ओवरले नहीं है, लेकिन इसमें एक अच्छी हालत बिल्डर इंटरफ़ेस है।

+0

स्टीव में यह संस्करण क्या है? मुझे लगता है कि मैं 1.1.3 का उपयोग कर रहा हूं और इसमें यह नहीं है ... – alex

+0

यह मुख्य क्षैतिज मेनू में, प्रचार> शॉपिंग कार्ट मूल्य नियमों पर जाना चाहिए। फिर एक नया नियम जोड़ें। नए नियम प्रपत्र में, बाईं ओर स्थित 'स्थितियों' वाले टैब पर क्लिक करें। मैं 1.0.19+ –

1

इस की जाँच करें: http://www.codeproject.com/KB/custom-controls/SqlWhereBuilder.aspx

घटक के क्लाइंट पक्ष जावास्क्रिप्ट पुस्तकालय संस्करण डाउनलोड करें और अपनी आवश्यकताओं के अनुकूलित। चीयर्स।

+1

यह कुछ वाकई अच्छे विचार देता है, धन्यवाद! – NPC

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

  • कोई संबंधित समस्या नहीं^_^