2011-09-01 11 views
6

मैं सोच रहा था कि आपको अपने मॉड्यूल के भीतर स्थित फ़ाइलों को शामिल करने के लिएया require_once का उपयोग करने की आवश्यकता है।module_load_include() बनाम requ_once

+0

Drupal खुला स्रोत है, तो आप कैसे इस समारोह लिखा है – ajreal

+0

@ajreal पर नियंत्रण कर सकते हैं। यहां तक ​​कि [ड्रूपल मैनुअल पेज] (http://api.drupal.org/api/drupal/includes--module.inc/function/module_load_include/6) 'requ_once' पर इसका उपयोग करने के लिए एक निश्चित मामला नहीं देता है। असल में, उस पृष्ठ पर टिप्पणियों में एक समान प्रश्न पूछा गया था, और जवाब था "यह इसका उपयोग करने के लिए अधिक ड्रूपल-आश है", जो वास्तव में एक बहुत ही उपयोगी उत्तर नहीं है जब आप सबसे अच्छा काम करने की कोशिश कर रहे हैं किसी भी स्थिति में अभ्यास करें। – Spudley

+0

@ajreal: अब मैं क्या कर रहा हूं, मैं बस सोच रहा हूं कि क्या आपको मॉड्यूल_लोड_इनॉल्टर का उपयोग करने की आवश्यकता है यदि आप एक ही मॉड्यूल के भीतर से फ़ाइलें शामिल करना चाहते हैं। – Frederic

उत्तर

13

मुख्य बात Drupal module_load_include() समारोह की और मानक पीएचपी require_once ऊपर करता है कि यह मॉड्यूल के पथ का संदर्भ देता है जब फ़ाइल को ढूंढने, drupal_get_path() का उपयोग कर रहा है।

यदि आप require_once का उपयोग करना चाहते थे, तो आपको यह खुद करना होगा।

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

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

+2

स्पष्टीकरण को और स्पष्ट करने के लिए, आपका मॉड्यूल साइट/सभी/मॉड्यूल/साइट्स/सभी/मॉड्यूल/contrib /, साइट्स/साइट.com/मॉड्यूल आदि में स्थापित किया जा सकता है module_load_include() पता चलेगा कि आपका मॉड्यूल कहाँ स्थापित है और सही पथ का प्रयोग करें। – Berdir

+0

@ बर्डिर: बिल्कुल सही। दूसरी तरफ, यदि आप इसे उसी मॉड्यूल के अंदर किसी अन्य फ़ाइल के भीतर से शामिल कर रहे हैं, तो आपको केवल सापेक्ष पथ को जानने की आवश्यकता है, इसलिए 'requ_once' पर्याप्त होगा। 'module_load_include()' आमतौर पर उस मॉड्यूल के बाहर से मॉड्यूल फ़ाइल (यानी ड्रूपल कोर में कोड द्वारा किए जाने की आवश्यकता के रूप में) सहित बेहतर उपयोग किया जाएगा, हालांकि आप काफी सही हैं; दोनों की जगह है। – Spudley

+5

@Spudley सापेक्ष पथ हमेशा प्रारंभिक रूप से अनुरोधित फ़ाइल से शुरू होता है, जो index.php है। वास्तव में अपने मॉड्यूल से एक फाइल को शामिल करने के लिए, आपको अपनी .module फ़ाइल का स्थान प्राप्त करने के लिए एक नाम जैसे dirname (\ __ FILE__) का उपयोग करना होगा। – Berdir

1

module_load_include को ड्रूपल को पूरी तरह से लोड करने की आवश्यकता है (पूरी तरह से बूटस्ट्रैप)।

वाक्यविन्यास: module_load_include ($ प्रकार, $ मॉड्यूल, $ name = NULL);

उदाहरण के लिए: module_load_include('inc','module_name','file_name');

यू एक वैश्विक संदर्भ में इस सुविधा का उपयोग करना चाहते हैं तो require_once का उपयोग

require_once यह जरूरत नहीं है।

उदाहरण के लिए: तो वह अभी भी एक वैध सवाल यह: require_once DRUPAL_ROOT . '/path/file' .

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