it-swarm.asia

العودة إلى مكون الميزة برمجياً

لدي ميزة مثبتة باستخدام ملف تعريف التثبيت. ولكن يجب علي دائمًا الذهاب وعكس مكون معين بحيث لا يتم تجاوزه (بحيث ، على سبيل المثال ، تظهر كتل الميزة). أردت فقط معرفة ما إذا كان يمكنني اتخاذ هذه الخطوة برمجيًا باستخدام التعليمات البرمجية نفسها في ملف تعريف التثبيت.

في لقطة الشاشة أدناه ، عرضت المكون الذي يجب إعادته برمجيًا (في لقطة الشاشة ، تمت إعادته بالفعل لذا لا تتوفر خانة الاختيار).

Screenshot

20
Hacker

يمكنني حل المشكلة باستخدام وظيفة ربط fe_block_settings_features_revert('basic_site') حيث fe_block_settings هو الخطاف ، أي أن المكون هنا و basic_site هو اسم الميزة/الوحدة.

4
Hacker

فيما يلي بعض الأفكار حول إعادة تعيين الميزات الخاصة بك برمجيًا أو كبرامج نصية تثبيت إضافية.

يمكنك استخدام Drush لإعادة الميزة :

drush features-revert [feature name]

هناك فكرة أخرى تتمثل في استخدام features_revert () أثناء عملية التثبيت:

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

قد تكون الوحدة Strongarm مفيدة أيضًا القوة الخاص بك الميزة للاحتفاظ بحالتها الافتراضية على ما أعتقد.

يجب أن أتفق معLetharion في تعليقه على OP الخاص بك. أود أن أعرف أن الأشياء المهمة الأخرى لا يتم تعديلها عن طريق الخطأ أثناء عملية التثبيت.

20
Citricguy

إعادة جميع المكونات في الميزة

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

يمكنك التراجع عن وحدة ميزات واحدة باستخدام features_revert_module () .

features_revert_module('my_feature');
15
milkovsky
features_revert(array('module' => array('component')));

حيث "الوحدة النمطية" هي اسم وحدة الميزات المحددة (أي الوحدة التي تم إنشاؤها عند تنزيل الميزة) و "المكون" هي مكونات تلك الميزات. لذلك إذا كنت ترغب فقط في عكس الحقول المحددة في الميزة ، يمكنك استخدام "الحقل" للمكون.

5
user1496391

استخدم 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();
    }
  }
}

راجع: Add drush Rules-revert [# 2474577] | Drupal.org

4
kenorb

لعكس جميع المكونات التي تم تجاوزها لجميع الميزات في ملف تعريف التثبيت ، أضف ما يلي إلى hook_profile_tasks () لملف .profile الخاص بك:

/**
 * Rebuild & Revert all enabled features.
 */
features_rebuild();
features_revert();
2
rcourtna
    /**
     * 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)));
      }
    }
0
Alex Skrypnyk