प्रोग्रामर फीचर फ़ीचर को रिवर्ट करें


21

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

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

स्क्रीनशॉट


मेरे पास आपके प्रश्न का उत्तर नहीं है, लेकिन मैं शर्त लगाने को तैयार हूं कि यदि आप कुछ समय कतार में बिताते हैं, तो आपको पता चलेगा कि यह उल्टा क्यों शुरू होता है। यदि कोई पैच उपलब्ध नहीं है, तो कम से कम आप यह समझने के करीब होंगे कि आपको समस्या पर हमला करने की आवश्यकता कहां है।
7

@ लॉथेरियन - लेकिन ये सभी कस्टम ब्लॉक और विचार विकसित हैं।
हैकर

उस परिभाषा के अनुसार, आप जो कुछ भी निर्यात करते हैं वह "कस्टम" होगा, जिससे मुझे कोई मतलब नहीं है।
सुस्ती

जवाबों:


20

प्रोग्राम के रूप में या ऐड-ऑन स्थापित स्क्रिप्ट के रूप में अपनी सुविधाओं को रीसेट करने पर कुछ विचार यहां दिए गए हैं।

आप सुविधा को रीसेट करने के लिए Drush का उपयोग कर सकते हैं :

drush features-revert [feature name]

इंस्टॉल प्रक्रिया के दौरान features_revert () का उपयोग करने के लिए एक और विचार होगा :

features_revert(array('module' => array('component')));

StrongARM रूप में अच्छी तरह के मॉड्यूल उपयोगी हो सकता है के लिए मजबूर अपने फ़ीचर उसके डिफ़ॉल्ट राज्य मुझे लगता है कि बनाए रखने के लिए।

मुझे आपके ओपी पर उनकी टिप्पणी में @Letharion से सहमत होना होगा। मैं यह जानना चाहूंगा कि इंस्टॉल की प्रक्रिया के दौरान अन्य महत्वपूर्ण चीजों को गलती से संशोधित नहीं किया जा रहा है।


16

सुविधा में सभी घटकों को वापस लाएं

$feature = features_get_features('my_feature_machine_name');
$components = array_keys($feature->info['features']);
features_revert(array('my_feature_machine_name' => $components));

4
मुझे लगता है कि features_revert_module ('my_module'); इन सभी चरणों को करता है।
एलिय्याह लिन


5
features_revert(array('module' => array('component')));

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


4

मैं हुक फ़ंक्शन का उपयोग करके समस्या को हल कर सकता हूं fe_block_settings_features_revert('basic_site')जहां fe_block_settings हुक है अर्थात घटक और यहां बुनियादी_ फीचर / मॉड्यूल नाम है।


3
क्या आप थोड़ा और समझा सकते हैं? आप इस फ़ंक्शन को .profile या स्थापना में कैसे उपयोग करते हैं?
kLezer

4

features_revert()सिंटैक्स केवल जहां विशिष्ट घटकों को वापस करने के लिए उपयोग करें :

features_revert(array($module => $components));

उदाहरण के लिए:

features_revert(array('module_name' => array('taxonomy', 'node')));

पूरे मॉड्यूल (इसके सभी घटकों के साथ) को वापस करने के लिए, फिर features_revert_module()इसके बजाय उपयोग करें , उदाहरण के लिए:

features_revert_module('module_name');

नियम

नियमों के लिए, यह विधि बहुत तेज है (एकल नियम को वापस लाने के लिए):

$rule_name = 'my_custom_rule';
if ($rule = rules_config_load($rule_name)) {
  $rule->delete();
}

सभी नियमों को वापस करने के लिए, यह है:

if ($rules = rules_config_load_multiple(FALSE)) {
  foreach($rules as $rule) {
    if ($rule->hasStatus(ENTITY_OVERRIDDEN) && !$rule->hasStatus(ENTITY_FIXED)) {
      $rule->delete();
    }
  }
}

देखें: ड्रश नियम जोड़ें-उल्टा [# 2474577] | Drupal.org


2

अपनी स्थापना प्रोफ़ाइल में सभी विशेषताओं के सभी ओवरराइड किए गए घटकों को वापस करने के लिए, अपनी .profile फ़ाइल के hook_profile_tasks () में निम्न जोड़ें:

/**
 * Rebuild & Revert all enabled features.
 */
features_rebuild();
features_revert();

0
    /**
     * Reverts all components of a feature.
     */
    function YOURMODULE_helpers_install_features_revert($module, $component = NULL) {
      module_load_include('inc', 'features', 'features.export');
      features_include();
      if (($feature = feature_load($module, TRUE)) && module_exists($module)) {
        $components = array();
        if (is_null($component)) {
          // Forcefully revert all components of a feature.
          foreach (array_keys($feature->info['features']) as $component) {
            if (features_hook($component, 'features_revert')) {
              $components[] = $component;
            }
          }
        }
        else {
          // Use the $component argument of this function.
          $components[] = $component;
        }
        foreach ($components as $component) {
          features_revert(array($module => array($component)));
        }

        drush_print(format_string('Reverted "!module" feature components !components.', array(
          '!module' => $module,
          '!components' => implode(', ', $components),
        )));
      }
      else {
        drush_print(format_string('Unable to revert "!module" feature.', array('!module' => $module)));
      }
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.