हुक के पीछे मूल अवधारणा क्या है?


120

मैं PHP में मध्यवर्ती हूँ। अपने कौशल को चमकाने के लिए मैंने Drupal सीखना शुरू कर दिया है। Drupal वास्तुकला अवधारणाओं को सीखने के दौरान, हुक और बूटस्ट्रैपिंग ने मुझे बहुत हैरान कर दिया। मैंने "प्रो Drupal development" पुस्तक, और drupal.org पर कुछ प्रलेखन पढ़ा, लेकिन यह मेरे लिए इतना उन्नत है कि वेब पेज को प्रदर्शित करने के लिए Drupal में हुक कैसे काम करते हैं।

क्या कोई मुझे बता सकता है कि सरल शब्दों में कौन से हुक हैं?

जवाबों:


107

अन्य उत्तर महान, सटीक, विस्तृत हैं, लेकिन मुझे यकीन नहीं है कि वे "सरल शब्द" हैं जो उस अवधारणा की नंगे हड्डियों को समझाते हैं जो पूछने वाले की तलाश थी।

मुझे लगता है कि हुक एक बिंदु के रूप में है जहां कोड रुकता है और चिल्लाता है " किसी और को यहां जोड़ने के लिए कुछ भी मिला? "। किसी भी मॉड्यूल में एक फ़ंक्शन हो सकता है जो इसका उत्तर देता है, और कोड में उस बिंदु पर इसे पारित उचित डेटा के साथ चालू हो जाता है।

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

आप यह पता लगा सकते हैं कि हुक क्या है और यह पता लगाएं कि ड्रुपल आपी में "हुक_" से शुरू होने वाली चीजों की खोज करके उन्हें क्या डेटा दिया गया है ।

हुक एक नाम सम्मेलनों द्वारा काम करते हैं: hook_node_deleteहमारे उदाहरण के रूप में उपयोग करते हुए , जब नोड विलोपन प्रक्रिया उस बिंदु तक पहुंचती है जहां हुक को बुलाया जाता है, प्रत्येक मॉड्यूल के लिए एक फ़ंक्शन के साथ इस तरह से [modulename]_node_delete()जहां हुक के नाम में हुक को मॉड्यूल के नाम से प्रतिस्थापित किया जाता है (जैसे my_amazing_module_node_delete()), उन कार्यों को कहा जाता है।

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

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

यह सरल है, वास्तव में शक्तिशाली है और इस बात के दिल में है कि ड्रुपल एक मॉड्यूलर प्रणाली के रूप में कैसे काम करता है। हुक के कार्यान्वयन अधिकांश Drupal मॉड्यूल के दिल में हैं।

ड्रुपल मॉड्यूल के कोड के माध्यम से देखने पर, आप हुक से आने वाले कार्यों को देख सकते हैं (उन कार्यों के विपरीत जिन्हें केवल मॉड्यूल कोड के भीतर से कहा जाता है), क्योंकि ड्रुपल समुदाय एक अधिवेशन लागू करता है जिसके तहत हुक का प्रत्येक कार्यान्वयन होता है इसके सामने इस तरह से टिप्पणी करें ("इम्प्लीमेंट्स हुक _..." बिट पर ध्यान दें):

/**
 * Implements hook_some_hook().
 *
 * Some descriptive summary of what this does
 */
function my_amazing_module_some_hook() {

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

  • modulename.api.phpमॉड्यूल फ़ोल्डर में फ़ाइल में कोड और टिप्पणियां
  • drupalcontrib.org - उदाहरण के लिए, यहाँ D7 मॉड्यूल की उनकी सूची है , जिनके बारे में उन्हें जानकारी है, और यहाँ व्यूज़ का उनका पृष्ठ है

बूटस्ट्रैपिंग है, जैसा कि दूसरों ने समझाया, मूल रूप से बूटिंग - मैं अन्य अच्छे स्पष्ट स्पष्टीकरण की नकल नहीं करूंगा।


53

हुक, ज्यादातर विज़िटर , और ऑब्जर्वर पैटर्न के कार्यान्वयन हैं ।

सबसे आम हुक कार्यान्वयन में से एक है हुक_मेनू , जो मॉड्यूल को एक ड्रुपल सिस्टम के भीतर नए रास्तों को पंजीकृत करने की अनुमति देता है।

function my_module_menu() {
  return array('myawesomefrontpage' => array(
    'page callback' => 'function_that_will_render_frontpage'
  ));
}

ड्रुपल में एक बहुत लगातार पैटर्न एक [DATATYPE]_infoहुक, और एक [DATATYPE]_info_alterहुक है। यदि आप एक नया फ़ील्ड प्रकार बनाना चाहते हैं, तो आप संबंधित field_info -hook को कार्यान्वित करेंगे , और यदि आप किसी मौजूदा फ़ील्ड में हेरफेर करना चाहते हैं, तो आप संबंधित फ़ील्ड_info_alter -hook लागू करेंगे ।

संपादित करें: जैसा कि चेक्स टिप्पणियों में बताते हैं, पर्यवेक्षक पैटर्न ऑब्जेक्ट ओरिएंटेड है, जो ड्रुपल 7 अभी भी है, ज्यादातर, नहीं। हालाँकि एक विकी पृष्ठ है, ऑब्जेक्ट-ओरिएंटेड परिप्रेक्ष्य से ड्रुपल प्रोग्रामिंग (4 अप्रैल, 2005 को जॉनबेक द्वारा बनाया गया), जो बताता है कि ड्रुपल इसके बावजूद ऑब्जेक्ट ओरिएंटेड कोड पैटर्न का उपयोग कैसे करता है। यह ध्यान रखना दिलचस्प है कि इसमें पर्यवेक्षकों का उल्लेख है, लेकिन आगंतुकों का नहीं।

Drupal 8 पर ध्यान दें यह अभी भी जल्दी है, और परिवर्तन के अधीन है, लेकिन मैं यह जोड़ना चाहता हूं कि जबकि हुक में काफी समय के लिए Drupal की कार्यक्षमता जोड़ने में de-facto मानक रहा है, प्लगइन्स की अवधारणा बहुत अधिक दिखाई देगी Drupal 8 में, और हमें Core के साथ बातचीत करने के नए तरीके देगा। प्रासंगिक मुद्दा , और प्रलेखन


2
OOP डिजाइन पैटर्न द्वारा बाँस न बनाया जाए। यह एक नहीं है। Drupal हुक AOP हैं। निचे देखो।

@chx, जबकि मैं स्वतंत्र रूप से मानता हूं कि आप मुझसे बेहतर जानते हैं :) और आपका उत्तर सही है (मैंने इसे वोट दिया है) मैं इस बात की व्याख्या नहीं करता कि मेरा उत्तर गलत है। :) यदि आप असहमत हैं तो मैं सीखना चाहूंगा कि कैसे मैंने उनके कार्यान्वयन के पैटर्न को गलत समझा है।
18

4
विकिपीडिया: "ऑब्जर्वर पैटर्न एक सॉफ्टवेयर डिज़ाइन पैटर्न है जिसमें एक ऑब्जेक्ट, जिसे विषय कहा जाता है, अपने आश्रितों की एक सूची रखता है, जिसे पर्यवेक्षक कहा जाता है" यहां पर्यवेक्षक रखने वाली कोई वस्तु नहीं है। आगंतुक murkier है, लेकिन एक ही सामान्य सिद्धांत लागू होता है: जो OOP नहीं है वह OOP पैटर्न नहीं हो सकता है।

33

आम आदमी की शर्तों में, हुक पुलों की तरह होते हैं जो मॉड्यूल को एक-दूसरे के साथ बातचीत करने, एक-दूसरे की संरचना और डेटा को बदलने, नया डेटा प्रदान करने आदि का एक तरीका प्रदान करते हैं।

ज्यादातर मामलों में, hook_फ़ंक्शन नामों में शब्द को आपके मॉड्यूल के नाम से बदल दिया जाता है, और जो आपके मॉड्यूल को किसी अन्य मॉड्यूल के संचालन में टैप करने का एक तरीका प्रदान करता है। उदाहरण के लिए "नोड" नामक एक ड्रुपल कोर मॉड्यूल विभिन्न हुक को आमंत्रित करता है। उनमें से एक है hook_node_updateजो हर बार आह्वान किया जाता है एक मौजूदा नोड अद्यतन किया जाता है। जब यह हुक लगाया जाता है, तो आपके मॉड्यूल का (इसे हम कहते हैं mymodule) कार्यान्वयन hook_node_updateकहा जाता है, जो इस मामले में आपके मॉड्यूल की -module फ़ाइल में एक फ़ंक्शन होगा जिसे कहा जाता है mymodule_node_update(स्पष्ट रूप से यह फ़ंक्शन आपके मॉड्यूल के फ़ोल्डर में किसी भी फ़ाइल में लंबे समय तक हो सकता है। यह .module फ़ाइल में भी शामिल है)। इस हुक को आवश्यक पैरामीटर (चर) भी पारित किया जाएगा जिसका उपयोग हुक को वापस लाने वाले फ़ंक्शन में उपयोग, संशोधित और / या वापस कर सकता है।

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


1
thanx आपके उत्तर के लिए। यह मेरी बहुत मदद करता है। क्या आप बता सकते हैं कि
ड्रुपल

@ बेयासा, कृपया अपने विचार यहाँ दर्ज करें। मैं सिर्फ अपना जोड़ रहा हूं। आप अपने कंप्यूटर को शुरू करने के रूप में बढ़ावा देने के बारे में सोच सकते हैं। Drupal के पास कई API हैं, जिनमें डेटाबेस, फाइलें और फॉर्म शामिल हैं। ये एक "प्लेटफ़ॉर्म" पर आधारित हैं। बूटस्ट्रैप के दौरान, Drupal इन फ़ंक्शन और अन्य सेटिंग्स (डेटाबेस कनेक्शन, फ़ाइल फ़ोल्डर, आदि) को परिभाषित करता है ताकि बाकी सिस्टम बाकी से जारी रह सके।
आयुष

32

कोर डेवलपर्स में से एक ने कुछ समय पहले एक लेख लिखा था जिसे "ऑब्जेक्ट-ओरिएंटेड परिप्रेक्ष्य से ड्रुपल प्रोग्रामिंग" कहा जाता है । यह यह समझाने का एक अच्छा काम करता है कि हुक को सामान्य डिजाइन पैटर्न के कई कार्यान्वयन के रूप में कैसे सोचा जा सकता है । हुक का सबसे अच्छा विवरण लेख से आता है:

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


1
मैंने उस लेख का विवरण drupal.org/node/19964 के

@chx, धन्यवाद। मैं अब इस उत्तर को हटाने पर विचार कर रहा हूं। मैंने इसे पोस्ट किया b / c मैं सादे O में बहुत सारे OO काम करता था, और O / अवधारणाओं का उपयोग ओ / ओ वास्तविक वस्तुओं के लिए करता था। हालाँकि, आप बिंदु / बुनकर संबंध के बारे में सही हैं। मुझे यकीन नहीं है, हालांकि, यदि उद्धरण एक पहलू का सटीक वर्णन है ("इंटरफ़ेस अमूर्त" भाग की अनदेखी)।
mpdonadio

21

बूटस्ट्रैप वह प्रक्रिया है जिसके माध्यम से ड्रुपल एक पेज बनाने के लिए जाता है, जो मूल रूप से सभी कोर, थीम और मॉड्यूल कोड के ऊपर चल रहा है।
यह मूल रूप से ड्रुपल कैसे बूट करता है, और इसे सीएमएस के रूप में काम करने के लिए तैयार करता है।

यह चतुर है, इसमें हमें अपने मॉड्यूल और थीम में कहीं भी हुक लगाने की अनुमति मिलती है, और बूटस्ट्रैप प्रक्रिया सुनिश्चित करती है कि वे सही बिंदु पर चले।
उदाहरण के लिए यदि आप एक फॉर्म में एक कस्टम चेक-बॉक्स जोड़ने के लिए 'hook_form_alter' का उपयोग करते हैं, तो Drupal का बूटस्ट्रैप सुनिश्चित करेगा कि यह आपके कोड को प्रस्तुत करने से ठीक पहले, उस कोड को चलाता है।

बूटस्ट्रैप के साथ एक मुद्दा यह है कि पूरी प्रक्रिया को चलने में समय लगता है, भले ही आप केवल थोड़ी मात्रा में डेटा लौटा रहे हों। एपीआई के रूप में सेवा मॉड्यूल के साथ Drupal का उपयोग करते समय और कई छोटे XHTML या JSON प्रतिक्रियाओं को वापस करते हुए, संपूर्ण बूटस्ट्रैप के माध्यम से चलना बहुत अच्छा नहीं होता है। कुछ चतुर लोग Drupal 8 के लिए इसके चारों ओर चतुर तरीके देख रहे हैं।

लेकिन सामान्य Drupal पृष्ठों को प्रस्तुत करने के लिए, बूटस्ट्रैप प्रक्रिया महान काम करती है, यह चीजों को गति देने के लिए Drupals caching प्रणाली का उपयोग करती है, और आपको आपकी साइट के प्रत्येक भाग पर कुल नियंत्रण प्रदान करती है। यदि आप अपनी साइट को धीमा पाते हैं, तो आप हमेशा चीजों को गति देने में मदद करने के लिए APC या MemCached जैसी किसी चीज का उपयोग कर सकते हैं।

मुझे आशा है कि मेरा उत्तर सटीक था और चीजों को केवल आपके लिए समझाता हूं, मैं कोई विशेषज्ञ नहीं हूं, लेकिन मुझे लगता है कि यह कैसे काम करता है।


15

बूटस्ट्रैप वह प्रक्रिया है जिसके दौरान ड्रुपल खुद को इनिशियलाइज़ करता है; प्रक्रिया में वास्तव में शामिल हैं:

  • त्रुटि, और अपवाद संचालकों को सेट करना
  • में निहित कुछ कल्पना-वैश्विक चरों के मूल्य को आरम्भ करना $_SERVER
  • कुछ चरों के साथ आरंभ करना init_set()
  • सेवा करने के लिए पेज का कैश्ड संस्करण खोजना
  • डेटाबेस को प्रारंभ करना
  • हैंडलर सेट करना जो एक वर्ग, या इंटरफ़ेस के दौरान फ़ाइलों को लोड करता है
  • Drupal वैरिएबल की शुरुआत
  • PHP सत्र शुरू करना
  • भाषा चर की शुरुआत
  • सक्षम मॉड्यूल लोड हो रहे हैं

मेरे द्वारा बताए गए कुछ ऑपरेशन Drupal 7, या उच्चतर के लिए विशिष्ट हैं, लेकिन अधिकांश ऑपरेशन Drupal संस्करण से स्वतंत्र हैं।

एक हुक एक PHP फ़ंक्शन है जिसे किसी कार्य को करने के लिए आवश्यक होने पर Drupal, या तृतीय-पक्ष मॉड्यूल से कॉल किया जा सकता है। कॉल करने के लिए फ़ंक्शन की एक उपसर्ग सूची होने के बजाय, सूची सक्षम मॉड्यूल की जाँच कर रही है, और वे कार्य कार्यान्वित करते हैं।
उदाहरण के लिए, ड्रुपल उपयोग करता है hook_node_update(); जब नोड को नोड_सेवे () के साथ सहेजा जा रहा है , तो निम्नलिखित कोड निष्पादित किया जाता है।

// Call the node specific callback (if any). This can be
// node_invoke($node, 'insert') or
// node_invoke($node, 'update').
node_invoke($node, $op);

क्या नोड_विनवोक () निम्नलिखित है:

  • सभी सक्षम मॉड्यूल की सूची प्राप्त करना
  • यदि सक्षम मॉड्यूल में कोई फ़ंक्शन है जिसका नाम "_node_update" में समाप्त होता है और मॉड्यूल के संक्षिप्त नाम से शुरू होता है
  • उस फ़ंक्शन को कॉल करना, $nodeपैरामीटर के रूप में गुजर रहा है

हुक डेटाबेस में अपना डेटा सहेज सकते हैं, या फ़ंक्शन से लौटाए गए मान को बदल सकते हैं। पिछले मामले के साथ होता है उदाहरण के लिए, है, hook_form_alter () हैं, जिनमें से मूल्य बदल $formसंदर्भ के रूप में पारित कर दिया करने के लिए () drupal_prepare_form

ड्रूपल हुक आमतौर पर तीन कार्यों का उपयोग करके लगाए जाते हैं:

drupal_alter()समारोह में इस तरह के रूप में विशिष्ट हुक जिसका उद्देश्य डेटा को बदलने के लिए है उन्हें संदर्भ के रूप में पारित कर दिया, आह्वान करने के लिए प्रयोग किया जाता है () hook_form_alter , hook_hook_info_alter () , और hook_tokens_alter ()

ऐसे अन्य कार्य हैं जो हुक को लागू करने के लिए उपयोग किए जाते हैं, जैसे कि node_invoke(), लेकिन वे फ़ंक्शन अनिवार्य रूप से उन कार्यों में से एक का उपयोग करते हैं जिन्हें मैंने पहले सूचीबद्ध किया था।


12

हुक पॉइंटकट हैं और module_invoke_allबुनकर हैं (अफसोस कि हम कार्यान्वयन में स्पष्ट नहीं हैं और अन्य बुनाई कार्य हैं)। जहां तक ​​मुझे जानकारी है, Drupal PHP कार्यों के साथ AOP को लागू करने वाली एकमात्र प्रणाली है ।

एक और स्पष्टीकरण देखें कि द्रुपाल में AOP कैसे काम करता है?


क्या आपको लगता है कि झोडगोंड का लेख (मेरे उत्तर में उल्लिखित) सटीक है?
mpdonadio

2
2005 से जोंबोब का यह लेख गलत है। मैं इस पर बहस करूंगा, हां।

6

यदि आप हुक देखना चाहते हैं तो ड्रुपल आपको कॉल करने देता है , api.drupal.org पर जाएं, खोज बॉक्स पर टैब करें, और 'हुक_' टाइप करें। यह आपको ड्रुपल द्वारा परिभाषित अधिकांश हुक की एक बड़ी सूची देगा। '_Alter' के लिए भी यही काम करें और आगे भी देखें।

नोड एपीआई हुक पेज सब हुक नोड आपरेशनों के दौरान लागू की एक कालानुक्रमिक सूची प्रदान करता है। आप एनकोड मॉड्यूल और एंटिटी और फील्ड सिस्टम को एक-दूसरे को हूक करते हुए देख सकते हैं।

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

यह आपके कोड को नोड पर विचाराधीन कार्य करने का मौका देता है क्योंकि यह लोड है, टुकड़ा द्वारा टुकड़ा। इन हुकों को सीखना और उन्हें कब और क्यों बुलाया जाता है यह ड्रुपल कोडिंग के रोमांच का हिस्सा है। :-)

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

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

यदि आपको यह सुनिश्चित करने की आवश्यकता है कि आगे बढ़ने से पहले Drupal ने एक निश्चित बिंदु पर बूट किया है, तो आप कॉल कर सकते हैं drupal_bootstrap()। यदि आप उस दस्तावेज़ के माध्यम से क्लिक करते हैं, तो आप बूटस्ट्रैप स्तर उपलब्ध देख सकते हैं, कुछ भी नहीं से लेकर सब कुछ।

और, अंत में, आप उदाहरण के प्रोजेक्ट पर किसी भी सबसिस्टम के लिए कुछ बड़े पैमाने पर प्रलेखित कोड देख सकते हैं ।


ओपी हुक की परिभाषा पूछ रहा है, न कि ड्रुपल द्वारा इस्तेमाल किए गए हुक की सूची।
kiamlaluno

6

हुक php फ़ंक्शंस हैं, जो बिल्डिंग नामकरण सम्मेलनों "yourmodulename_hookname" पर आधारित हैं, वे मॉड्यूल बनाने के लिए डेवलपर्स की क्षमता को कम करने के लिए हैं ।

मॉड्यूल असली सौदा हैं क्योंकि वे आपके Drupal सिस्टम में CORE और कस्टम फ़ंक्शंस दोनों को सक्षम करते हैं। इस प्रकार, मॉड्यूल हुक से बने होते हैं और जब एक मॉड्यूल आपके ड्रुपल इंस्टॉल में सक्रिय होता है, तो इसके हुक फ़ंक्शन को अन्य मॉड्यूल से धन्यवाद कहा जा सकता है जो मॉड्यूल.inc फ़ंक्शन मॉड्यूल_invoke_all ($ हुक) या मॉड्यूल_ invoke के लिए धन्यवाद ।

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

ऊपर वर्णित डेवलपर्स के लिए उपयोगी ड्रुपल के कुछ उदाहरण यहां दिए गए हैं:

block_example मॉड्यूल में hook_block_view () कार्यान्वयन उदाहरण

/**
 * @file examples/block_example/block_example.module line 127
 *
 * Implements hook_block_view().
 *
 * This hook generates the contents of the blocks themselves.
 */
function block_example_block_view($delta = '') {
  //The $delta parameter tells us which block is being requested.
  switch ($delta) {
    case 'example_configurable_text':
      // The subject is displayed at the top of the block. Note that it
      // should be passed through t() for translation. The title configured
      // for the block using Drupal UI supercedes this one.
      $block['subject'] = t('Title of first block (example_configurable_text)');

यह हुक आपको अपनी वेबसाइट पर कस्टम ब्लॉक प्रदर्शित करने के लिए ड्रुपल के ब्लॉक निर्माण तक पहुंच प्रदान करता है। यह संभव है क्योंकि block.module में एक _block_render_block फ़ंक्शन है जो सभी मॉड्यूल को उनके हुक_ब्लॉक दृश्य (अंतिम मॉड्यूल को नोटिस करने में सक्षम) सक्षम करता है:

/**
 * @file modules/block/block.module, line 838
 *
 * Render the content and subject for a set of blocks.
 *
 * @param $region_blocks
 *   An array of block objects such as returned for one region by _block_load_blocks().
 *
 * @return
 *   An array of visible blocks as expected by drupal_render().
 */
function _block_render_blocks($region_blocks) {
  ...
  foreach ($region_blocks as $key => $block) {
    ...
    $array = module_invoke($block->module, 'block_view', $block->delta);

render_example मॉड्यूल में hook_menu () कार्यान्वयन उदाहरण

/**
 * @file examples/render_example/render_example.module line 22
 * 
 * Implements hook_menu().
 */
function render_example_menu() {
  ...
  $items['examples/render_example/arrays'] = array(
    'title' => 'Render array examples',
    'page callback' => 'render_example_arrays',
    'access callback' => TRUE,
  );

यह हुक Drupal के url रूटिंग सिस्टम से जुड़ा हुआ है और आपके मॉड्यूल द्वारा उपयोग किए गए संबद्ध रेंडरबैक के साथ url पैटर्न को परिभाषित करता है। यह system.module से मंगवाया गया है

बूटस्ट्रैप के बारे में, मूल रूप से, आपको बस यह जानना होगा कि इसे प्रत्येक पृष्ठ अनुरोध पर निष्पादित किया गया है। मैं वास्तव में आपको इस स्टैकओवरफ्लो उत्तर को पढ़ने की सलाह देता हूं , यह बताता है कि बूटस्ट्रैप और हुक कैसे संबंधित हैं लेकिन अलग हैं।

वेब पेज के प्रदर्शन के बारे में, Drupal की वेबसाइट html डिस्प्ले ज्यादातर रेंडर सरणियों और थीमिंग के साथ प्राप्त की जाती है ।


3

कहीं भी एक मॉड्यूल मॉड्यूल_implements () http://api.drupal.org/api/drupal/includes%21module.inc/function/module_implements/7 Drupal उनके वजन के आधार पर सही क्रम में नामित सभी कार्यों को आग लगा देगा। इन्हें हुक फ़ंक्शंस कहा जाता है क्योंकि मॉड्यूल के लिए प्रलेखन में जो मॉड्यूल_implements का उपयोग करते हैं, आप हुक_मेनू जैसी चीजों को देखते हैं (जब मेनू मेनू आइटम वापस करने के लिए डिज़ाइन किए गए सभी फ़ंक्शन कॉल करता है)। "हुक" शब्द को केवल इसे लागू करने वाले मॉड्यूल के नाम से बदलना होगा और ड्रुपल बाकी काम करता है।

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

आम तौर पर अल्टर्स संदर्भों से गुजरेंगे ताकि आप ऑब्जेक्ट को सीधे संपादित कर सकें, जबकि "सामान्य" हुक आमतौर पर आपको नई चीजें वापस करने के लिए मिलते हैं।

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

व्यवहार में हुक आमतौर पर सबसे अधिक उपयोग किया जाता है:

  • जब उपयोगकर्ता उपयोगकर्ता लॉग इन करता है, तो हू_सुअर_लगिन जैसी घटनाओं का जवाब दिया जाता है
  • कुछ नया पंजीकृत करें जो हुक_मेनू जैसी प्रणाली का विस्तार करने के लिए उपयोग किया जा सकता है
  • विषय / html प्रस्तुत करना या निर्माण / मान्य / फ़ॉर्म सबमिट करना

1

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

मुझे उम्मीद है कि आपको बात मिल जाएगी!


1

जब यह हुक और कोर (D7) की बात आती है, तो मुझे मॉड्यूल_implements फ़ंक्शन के बारे में पता चलता है। एक बात जो मुझे समझ में आती है, वह यह है कि किसी चीज़ को संशोधित करने के लिए हुक लिखकर, आप किसी भी तरह से अंतिम रूप से यह नहीं कह सकते हैं कि डेटा संरचनाओं के साथ क्या हो रहा है। आपका हुक बस उन कार्यों की लाइन (कतार) में मिलता है जो ALSO एक ही डेटा संरचनाओं पर कार्य कर रहे हैं चाहे वे मेनू, मेनू_लिंक, ब्लॉक, नोड, उपयोगकर्ता या कोई इकाई या रेंडर तत्व हो।

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

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

एक अच्छी तरह से लिखा हुक "मैन-हैंडल" या "बल" के लिए स्वयं अंतिम नहीं होगा, लेकिन यह सुनिश्चित करेगा कि वे लाइन के बाकी हुक द्वारा अपेक्षित डेटा संरचनाओं को बनाए रखें।

और हुक की "द लाइन" की बात कर रहे हैं। वर्षों से मैंने Drupal सामान के लिए Google को ट्रोल किया है, यह छवि प्रीप्रोसेस और प्रॉसेसिबिलिटी की हुक सूची की एक अच्छी प्रतिनिधित्व लगती है।
यहां छवि विवरण दर्ज करें


1

बहुत सरल तरीके से, हुक डेवलपर को मौजूदा कोड में परिवर्तन किए बिना आवश्यकताओं के अनुसार मौजूदा कार्यक्षमता को बदलने में मदद करते हैं। Php में Abstract फंक्शन की तरह।

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

ड्रुपल -7 तक ड्रूपल में हमारे पास मॉड्यूल के साथ-साथ थीम भी हैं। यह जानने के लिए कि हुक कैसे काम करता है, drupal.org हुक है, कस्टम हुक बनाने के लिए इस लिंक की जाँच करें


0

हुक। मोड्युल्स को ड्रूपल कोर के साथ बातचीत की अनुमति दें। ड्रुपल का मॉड्यूल सिस्टम "हुक" की अवधारणा पर आधारित है। एक हुक एक PHP फ़ंक्शन है जिसे foo_bar () नाम दिया गया है, जहां "foo" मॉड्यूल का नाम है (जिसका फ़ाइल नाम इस प्रकार foo.module है) और "बार" हुक का नाम है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.