फ़ील्ड को हटाने के साथ सुविधाएँ वर्कफ़्लो समस्या


14

मान लीजिए मैं किसी सामग्री प्रकार है Personक्षेत्रों के साथ: Name, Age,Email

इस सामग्री प्रकार को एक फीचर द्वारा नियंत्रित किया जाता है, testइसलिए मैं इसे नियंत्रित कर सकता हूं और इसे लाइव साइट पर धकेल सकता हूं।

मेरा वर्कफ़्लो इस तरह है:

  • मैं Personबुलाया पर एक नया क्षेत्र जोड़ता हूंPhone
  • स्थानीय रूप से मैं: drush fu test -y
  • मैं test.infoसंस्करण संख्या बढ़ाने के लिए संपादित करता हूं
  • मैं अपनी रिपॉजिटरी में बदलाव करता हूं
  • मैं फीचर को लाइव साइट पर भेजता हूं (फीचर फाइलों को कॉपी करता हूं)
  • लाइव साइट पर मैं करता हूं: drush fr test -y
  • लाइव साइट पर मैं करता हूं: drush cc all

फिर लाइव साइट पर नया फ़ील्ड दिखाई देता है Person

अगर मैं पहले कदम पर मैदान के एक क्षेत्र को हटाता हूं Personतो लाइव साइट से हटा नहीं दिया जाएगा। मैं इसे कैसे हल करूं? मैं लाइव साइट पर इसे UI से मैन्युअल रूप से हटाना नहीं चाहता।
क्या यह वर्कफ़्लो सही है?


1
स्वचालित रूप से संस्करण संख्या में वृद्धि करने के लिए ड्रश फू टेस्ट -y -version-increment का उपयोग करें
माइक

जवाबों:


9

यह एक डबल धार वाली तलवार है, यह डेटा डिलीट को रोकने के लिए ऐसा है जो हमेशा एक अच्छी बात है। वास्तव में हल करने के लिए कुछ भी नहीं है, यह अपेक्षित व्यवहार है।

यह वही वर्कफ़्लो है जिसका हम उपयोग करते हैं और एक वर्ष से अधिक समय से कर रहे हैं और यह वास्तव में अच्छी तरह से काम करता है। मैं कहूंगा कि यह सही है लेकिन यह बहुत ही व्यक्तिपरक उत्तर है।


और अगर मैं वास्तव में क्षेत्र को हटाना चाहता था? क्या मुझे अपडेट हुक में देखना चाहिए? (मैं एक डी 7 नौसिखिया हूं)।
चेरोविम

3
अपडेट हुक आदर्श होगा, या इसे मैन्युअल रूप से हटा दें।
डिजिटल

2
ठीक है, मैं भी कर सकता हूँdrush field-delete field
cherouvim

@cherouvim तो आपको यह करना होगा कि हर बार जब आप किसी फीचर को दोबारा बनाएंगे?
अलक्ष्वल्जो

सुविधा की स्थापना। फ़ाइल में एक हुक_अपडेट_ () काम करेगा।
माइक

10

सुविधाएँ-निर्मित सामग्री को निकालने का सही तरीका हुक_अपडेट_ (जो फ़ाइल में लागू किया जाना चाहिए your_module.install) के माध्यम से है।


सुविधाओं के साथ मुख्य विचार कोड के साथ कॉन्फ़िगरेशन का प्रबंधन करना है। का उपयोग करना hook_update_Nउस के अनुरूप है, क्योंकि क्षेत्र विलोपन कोड में है (जिसे संस्करण नियंत्रण के साथ प्रबंधित किया जा सकता है) - जबकि समतुल्य कमांड drush field-delete fieldको प्रबंधित कोड से नहीं बुलाया जा रहा है; यह एक अलग कमांड-लाइन कदम है जिसे आपको प्रदर्शन करने की आवश्यकता है (और प्रदर्शन करने के लिए याद रखना)।


क्यों? drush field-delete fieldअच्छी तरह से काम नहीं करेगा ?
चेरोविम

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

किसी फ़ीचर की किस फ़ाइल में मैं हुक_अपडेट () का उपयोग करूँगा? हुक_अपडेट () एक नोड ऑब्जेक्ट को पैरामीटर के रूप में लेता है, इसलिए सुविधा को सक्षम करते समय इसे नोड ऑब्जेक्ट प्रदान करना संभव नहीं है।
सबजोत। Sub

@ subhojit777: उफ़, मैं गलत हुक प्रलेखन पृष्ठ से जुड़ा हुआ हूं। मैंने अभी लिंक तय किया है; कृपया डॉक्स देखें hook_update_N
स्मोक्रीस

@smokris :) मैंने अपने उत्तर में उस हुक का उल्लेख किया है
subhojit777

2

"Your_feature_name.install" नामक एक नई फ़ाइल बनाएं

फ़ाइल के अंदर hook_update_N घोषित करें , वहां आप field_delete_field () का उपयोग कर सकते हैं और उस फ़ील्ड का नाम निर्दिष्ट कर सकते हैं जिसे आप पैरामीटर के रूप में हटाना चाहते हैं।

अद्यतन चलाएँ। पीपीपी और फ़ील्ड हटा दिए जाएंगे।


0

यदि आप field_phoneअन्य क्षेत्रों में उपयोग कर रहे हैं, तो आप इसे अपने व्यक्तिगत सामग्री प्रकार से निकालना चाह सकते हैं, लेकिन इसे अपनी साइट से पूरी तरह से हटा नहीं सकते। मैन्युअल रूप YOUR_FEATURE_NAME.installसे अपने फ़ीचर के फ़ोल्डर में एक फ़ाइल बनाएं जैसे:

/**
 * Implements hook_update_N().
 *
 * Removes field_phone from Person content type.
 */
function YOUR_FEATURE_NAME_update_7001() {
  if ($instance = field_info_instance('node', 'field_phone', 'person')) {
    field_delete_instance($instance);
  }
  field_purge_batch(500);
  features_revert_module('YOUR_FEATURE_NAME');
}

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

if ($instance = field_info_instance('paragraphs_item', 'field_phone', 'person')) {
  ...
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.