हैकिंग कोर को दृढ़ता से बिन बुलाए के लिए हतोत्साहित किया जाता है क्योंकि यह प्रभावी रूप से एक के समर्थन समुदाय (या जो भी आपकी टीम का आकार है) के हजारों को कम करता है। इस सर्वोत्तम अभ्यास के बिना, ड्रुपल में उन नए लोगों की मदद करना असंभव होगा। यह प्रतिरूपकता और कुछ मामलों में, सुरक्षा में भी बाधा डालता है।
यह कहा गया है, हैकिंग कोर हमेशा उतनी बुराई नहीं है जितना हम इसे बाहर करना पसंद करते हैं। कोर को संशोधित किए बिना, हमारे पास प्रेसफ्लो जैसे वितरण नहीं होंगे और दिलचस्प तरीकों में यह वृद्धि कोर की तरह होगा। यह केवल महत्वपूर्ण रूप से महत्वपूर्ण है कि आप वास्तव में जानते हैं कि आप क्या कर रहे हैं, कि आप अपने पैच को अपने वितरण के साथ वितरित कर रहे हैं (अधिमानतः एक तरह से जो आपको उन्हें फिर से अपग्रेड करने के लिए फिर से लागू करने की अनुमति देता है), और यह कि आप विस्तृत दस्तावेज रख रहे हैं आपने क्या बदला है और आपने इसे क्यों बदला है।
इस बात पर निर्भर करते हुए कि आपने किस तरह से चीजों को संरचित किया है, आप निश्चित रूप से उपरोक्त बदलाव कर सकते हैं xmlrpc_request(), एक पैच बना सकते हैं, और फिर ड्रश मेक का उपयोग कर सकते हैं इसे लागू करने के लिए स्वचालित करें (ध्यान दें कि ड्रश मेक 5.x रिलीज के लिए ड्रश प्रोजेक्ट में ही चल रहा है। ), मेकफाइल और अन्य जगहों पर अतिरिक्त दस्तावेज की आपूर्ति करते समय, जैसा कि परिवर्तन करता है और यह आवश्यक / वांछित क्यों है।
कोर फ़ंक्शंस को बढ़ाने के लिए एक और सामान्य पैटर्न एक रैपर बनाना है जो एक कोर फ़ंक्शन में थोड़ी कार्यक्षमता जोड़ता है, और कोर के कार्यान्वयन के बदले में रैपर को कॉल करता है। जब संभव है, यह चीजों को बहुत अधिक मॉड्यूलर बनाता है। निम्नलिखित को धयान मे रखते हुए:
/**
* Wrapper function for xmlrpc_request() to provide logging.
*/
function mymodule_xmlrpc_request($method, $args) {
$xrr = xmlrpc_request($method, $args);
watchdog('xmlrpc', $xrr->xml);
return $xrr;
}
फिर, इस बात पर निर्भर करता है कि आप यह क्या कर रहे हैं या संभव नहीं हो सकता है, लेकिन जब आपने अपने आप को कुछ सिरदर्द से बचाया है, तो यह सुनिश्चित करने की कोशिश में कि कोर पैच और डॉक्यूमेंटेड है। हालांकि इस मामले में, इस तरह के एक बंद समारोह ऐसे आवरण के लिए एक आदर्श उम्मीदवार की तरह लगता है। यदि आपका कार्यान्वयन किसी मॉड्यूल में कैप्चर किया गया है, तो आप अपने संपूर्ण समाधान के लॉग स्तर को नियंत्रित करने के लिए उस पर भी विस्तार कर सकते हैं, उत्पादन के लिए इस कार्यक्षमता को अक्षम करना:
/**
* Wrapper function for xmlrpc_request() to provide logging (if enabled).
*/
function mymodule_xmlrpc_request($method, $args) {
$xrr = xmlrpc_request($method, $args);
if (variable_get('mymodule_log_level', 0) > 0) {
watchdog('xmlrpc', $xrr->xml);
}
}
संक्षेप में, आप मॉड्यूल के साथ जो कर सकते हैं उसे अधिकतम करना चाहते हैं (और आप बहुत कुछ कर सकते हैं), लेकिन कोर को बदलने के लिए वैध कारण हैं। यह ध्यान से किया जाना चाहिए, बस।