अजाक्स कॉलबैक के लिए सबसे तेज़ तरीका / कार्यान्वयन क्या है?


18

मेरे पास एक नक्शा है जो विभिन्न / कई मानचित्र घटनाओं पर अजाक्स के माध्यम से मार्करों को लोड करता है। वर्तमान में, मैं अपने hook_menu()आइटम के लिए एक कस्टम पेज कॉलबैक परिभाषित करता हूं जो मेरे json / js को प्रिंट करता है।

चूंकि मेरा पृष्ठ कॉलबैक किसी भी सामग्री को वापस नहीं करता है और केवल सामग्री प्रिंट करता है, Drupal पूर्ण टेम्पलेट, मेनू, आदि को प्रस्तुत नहीं करता है, और इस प्रकार मुझे केवल मेरे जावास्क्रिप्ट के साथ एक पृष्ठ वापस करने की अनुमति देता है ।

हालांकि यह काम करता है, मेरा मानना ​​है कि ड्रुपल अभी भी पूरी तरह से बूटस्ट्रैपिंग कर रहा है, जिसका अर्थ है कि यह बहुत अधिक ओवरहेड जोड़ रहा है जिसे मैं छोड़ना चाहूंगा।

मैं उच्च-प्रदर्शन जावास्क्रिप्ट कॉलबैक हैंडलर को देख रहा हूं , जो खुद को "उच्च-प्रदर्शन जावास्क्रिप्ट कॉलबैक हैंडलर" के रूप में समेटे हुए है और जो संक्षेप में, ऐसा लगता है जैसे यह आपके अनुरोधों को निर्देशित करने और अनुकूलित / सीमा / करने के js.phpलिए तारीफ index.phpकरने के लिए प्रदान करता है डिफ़ॉल्ट रूप से बूटस्ट्रैपिंग ड्रुपल का अनुकूलन करता है।

दुर्भाग्य से js प्रोजेक्ट में अभी तक D7 रिलीज़ नहीं है ( एक के लिए याचिका ), जो हमें शुरुआत में ले जाती है ...

द्रुपाल में अजाक्स कॉलबैक को लागू करने का सबसे तेज़ तरीका क्या है?

जवाबों:


8

मैं अपने hook_menu()आइटम के लिए एक कस्टम पृष्ठ कॉलबैक परिभाषित करता हूं जो मेरे json / js को प्रिंट करता है।

यही द्रुपाल 6 ने पेश किया। Drupal 7 AJAX ढांचे एक छोटे से अधिक कर सकते हैं। हाँ यह Drupal को बूटस्ट्रैप करता है, लेकिन यह मुफ्त में बहुत सारी सुविधाएँ भी देता है। संक्षेप में आप पेज डिलीवरी विधि के रूप में ajax_deliver () का उपयोग कर सकते हैं , और ब्राउज़र को कमांड भेज सकते हैं।

... बटन और लिंक में कक्षाएं जोड़कर अजाक्स को सक्षम किया जा सकता है। लिंक में 'यूज-अजाक्स' क्लास जोड़कर, लिंक को अजाक्स कॉल के माध्यम से लोड किया जाएगा। इस पद्धति का उपयोग करते समय, लिंक के href में पथ के भाग के रूप में '/ nojs' हो सकते हैं। जब अजाक्स फ्रेमवर्क अनुरोध करता है, तो यह इसे '/ ajax /' में बदल देगा। सर्वर तब आसानी से यह बताने में सक्षम होता है कि क्या यह अनुरोध वास्तविक अजाक्स अनुरोध के माध्यम से या अपमानित स्थिति में किया गया था, और उचित रूप से जवाब दें।

हालाँकि यदि आप प्रदर्शन के कारणों के लिए रूपरेखा तैयार करना चाहते हैं, तो आपके मॉड्यूल में सीधे php फाइलों को सीधे जावास्क्रिप्ट से कॉल करने से रोकने के लिए कुछ भी नहीं है। आपको कोई ड्रुपल अच्छाई नहीं मिलेगी, लेकिन पेज पर आपका पूरा नियंत्रण होगा।


धन्यवाद! प्रदर्शन के बावजूद मुझे वास्तव में अजाक्स फ्रेमवर्क का उपयोग करना चाहिए (अब जब मुझे इसके बारे में पता है) b / c ajax पेज अनुरोध प्रक्रिया में कोई सुधार संभवत: इस संदर्भ में होगा :)
इलेक्ट्रब्लॉक

2
उदाहरण मॉड्यूल पर एक नज़र डालें, वे बहुत मदद करेंगे, रूपरेखा रूपों की ओर तैयार है, लेकिन कहीं भी उपयोग किया जा सकता है। मैंने edited उपयोग-अजाक्स ’वर्ग के बारे में अपने उत्तर को थोड़ा संपादित किया है।
जेरेमी फ्रेंच

3
PHP फ़ाइलों को सीधे कॉल करना कभी-कभी ठीक होता है। आपके पास वह फ़ाइल भी हो सकती है जिसमें bootstrap.inc शामिल है और फिर api.drupal.org/api/drupal/includes--bootstrap.inc/function/ पर उस विशिष्ट स्तर पर कॉल करें जिसकी आपको आवश्यकता है।
greggles

4

थोड़ा देर से, लेकिन विशेष रूप से यदि आप मतदान के लिए उस ajax कॉलबैक का उपयोग कर रहे हैं (उदाहरण के लिए नए संदेशों की जांच), तो एक दिलचस्प विकल्प है: Drupal node.js एकीकरण

मतदान के बजाय, यह आपको एक ईवेंट जैसी प्रणाली बनाने की अनुमति देता है, जहां उपयोगकर्ता (उनके पृष्ठ पर जेएस उर्फ) आपके नोड.जेएस सर्वर के लिए एक खुला कनेक्शन रखते हैं। यदि कुछ होता है, तो आप सभी उपयोगकर्ताओं को नोड के माध्यम से सीधे सूचित कर सकते हैं।


महान सुझावों के लिए कभी देर नहीं हुई - इस तरह की चीज के लिए नोड.जेएस का उपयोग करने के बारे में कभी नहीं सोचा था लेकिन अचानक यह समझ में आता है, धन्यवाद!
electblake

3

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

ऐसा लगता है कि आपको अन्य मॉड्यूल से एपीआई का उपयोग करने की आवश्यकता है, तो आपको module_load_include()या शायद अधिक मैन्युअल include 'sites/all/modules/contrib/...';दृष्टिकोण का उपयोग करना होगा।

आप जिस समस्या के बारे में बात कर रहे हैं वह हाल ही में एक गर्म विषय रहा है। DrupalCon शिकागो के ड्रिस के मुख्य वक्ता ने बात की कि कैसे Drupal 8 को कॉलबैक और गैर-HTML आउटपुट फॉर्मेट करने के लिए बेहतर API की आवश्यकता है।


तो, संक्षेप में - JS.php और do / project / js पर शोध करते रहें? मैं D7 रिलीज के लिए अंक कतार में याचिका शुरू करूंगा। वीडियो के लिए धन्यवाद!
इलेक्टेक

हाँ इसकी वास्तविक शर्म की बात है कि जेएस परियोजना को अभी तक डी 7 में पोर्ट नहीं किया गया है। एक हल्के पेज अनुरोध प्राप्त करने के लिए इसकी इतनी शर्म की बात है।
मैट कॉलिन्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.