किसी सामग्री प्रकार से फ़ील्ड छोड़ने का सबसे अच्छा तरीका है


21

GUI के माध्यम से परिभाषित सामग्री प्रकार से Drupal 7 फ़ील्ड को निकालने का सबसे अच्छा तरीका क्या है? मैं Hook_update_N का उपयोग करना चाहता हूं, ताकि अपडेट चलने पर कई सर्वरों में परिवर्तन किए जा सकें। हालाँकि मैं इसका हल नहीं ढूंढ सकता। db_drop_table () कस्टम परिभाषित स्कीमा के लिए मेरे लिए समझ में आता है, लेकिन GUI के माध्यम से परिभाषित सामग्री प्रकार / फ़ील्ड के लिए नहीं।


आपने सामग्री प्रकार को परिभाषित करने के लिए एक कस्टम मॉड्यूल बनाया है?
स्ट्राइकर

iStryker: ने व्यवस्थापक इंटरफ़ेस के माध्यम से सामग्री प्रकार बनाया, कुछ फ़ील्ड जोड़े, फिर फ़ीचर के माध्यम से निर्यात किया। लेकिन अब मैं उन क्षेत्रों में से एक को प्रोग्रामेटिक रूप से हटाना चाहता हूं।
शौकिया बरिस्ता

ध्यान दिया जाता है कि D5 एक सामग्री_फ़ील्ड_स्टेंस_डेलीट () फ़ंक्शन प्रदान करता है , यहां और यहां प्रलेखित है , लेकिन वह फ़ंक्शन D7 के लिए उपलब्ध नहीं है। यह भी उत्सुक है कि D7 कोर में फ़ील्ड.install किस फ़ील्ड का उपयोग करती है: _update_7000_field_delete_instance () - एक कस्टम "आंतरिक" फ़ंक्शन जो दूसरों के उपयोग के लिए उपलब्ध नहीं है। खेतों के रूप में इतने महत्वपूर्ण के लिए, यह मुझे लगता है कि कहीं "सार्वजनिक" फ़ंक्शन उपलब्ध होना चाहिए, और यही मैं खोज रहा हूं।
शौकिया बरिस्ता

वर्तमान में मेरा "उम्मीदवार" सार्वजनिक समारोह field_delete_instance () है।
शौकिया बरिस्ता

जवाबों:


18

खेतों को हटाने के लिए दो एपि कार्य हैं:

  • field_delete_field संपूर्ण फ़ील्ड को हटाने के लिए (फ़ील्ड के सभी उदाहरण)
  • field_delete_instance किसी फ़ील्ड के केवल एक उदाहरण को हटाने के लिए - यह कैसे एक इकाई से जुड़ा हुआ है।

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


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

9

हाँ, field_delete_instance () फ़ील्ड इंस्टेंस को हटाने का कार्य है।

ध्यान दें कि field_delete_instance()स्वचालित रूप से कॉल करें field_delete_field()यदि कोई शेष उदाहरण नहीं हैं, तो field_delete_instance()सबसे अधिक संभावना है कि आपको कभी भी आवश्यकता होगी।

_update_7000_field_delete_instance()कोर अद्यतन कार्यों के लिए डिज़ाइन किया गया है। उदाहरण: अपडेट फ़ंक्शन में x_update_7000(), आप उपयोग कर रहे हैं field_delete_instance()। फिर x_update_7001(), आप {field_config}तालिका को असंगत तरीके field_delete_instance()से बदलते हैं और जाहिर है इसे भी बदलना होगा।

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

लेकिन, यह एक पैटर्न है जिसे आप अपने स्वयं के एपीआई कार्यों के लिए उपयोग करना चाह सकते हैं जिसे आप अपडेट कार्यों में उपयोग कर रहे हैं।

इसके अतिरिक्त, ये _update फ़ंक्शन हुक निष्पादित नहीं करते हैं क्योंकि परिणाम अनुमानित नहीं है (उदाहरण के लिए क्योंकि मॉड्यूल जिसके लिए अद्यतन चलाया जाता है) अक्षम हो सकता है।

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