Программный возврат компонента функции


У меня установлена функция с использованием профиля установки. Но мне всегда приходится идти и отменять определенный компонент, чтобы он больше не переопределялся (чтобы, например, появлялись блоки функции). Я просто хотел знать, могу ли я выполнить этот шаг программно, используя сам код в профиле установки.

На скриншоте ниже я показал компонент, который должен быть возвращен программно (на скриншоте он уже возвращен, так что флажок недоступен).

Screenshot

 20
Author: smokris, 2012-02-03

8 answers

Вот несколько мыслей о том, как сбросить ваши функции программно или в виде сценариев установки надстроек.

Вы можете использовать Drush для сброса функции :

drush features-revert [feature name]

Другой мыслью было бы использовать features_revert() во время процесса установки:

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

Модуль Strongarm также может быть полезен для заставить вашу функцию сохранить ее состояние по умолчанию, я думаю.

Я должен согласиться с @Letharion в его комментарии к вашей операции. Я хотел бы знать, что другие важные вещи не были ошибочно изменены в процессе установки.

 20
Author: Citricguy, 2015-08-24 06:56:17

Вы можете вернуть один модуль функций с помощью модуля features_revert_module().

features_revert_module('my_feature');
 17
Author: milkovsky, 2015-02-18 14:30:31

Возврат ВСЕХ компонентов в функции

$feature = features_get_features('my_feature_machine_name');
$components = array_keys($feature->info['features']);
features_revert(array('my_feature_machine_name' => $components));
 16
Author: Gaydabura, 2013-08-20 00:39:30
features_revert(array('module' => array('component')));

Где "модуль" - это имя модуля конкретных функций (т. Е. модуля, созданного при загрузке функции), а "компонент" - это компоненты этих функций. Поэтому, если вы просто хотите вернуть поля, определенные в функции, вы можете использовать "поле" для компонента.

 5
Author: user1496391, 2013-01-09 15:48:14

Я мог бы решить проблему с помощью функции hook fe_block_settings_features_revert('basic_site'), где fe_block_settings - это крючок, т.Е. Компонент здесь, а basic_site - имя функции/модуля.

 4
Author: Hacker, 2015-10-24 19:26:14

Использовать 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();
    }
  }
}

См.: Добавить правила drush- отменить [#2474577]| Drupal.org

 4
Author: kenorb, 2016-07-26 11:53:37

Чтобы отменить все переопределенные компоненты всех функций в вашем профиле установки, добавьте следующее в hook_profile_tasks() вашего файла .profile:

/**
 * Rebuild & Revert all enabled features.
 */
features_rebuild();
features_revert();
 2
Author: rcourtna, 2012-10-13 17:44:19
    /**
     * 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
Author: Alex Skrypnyk, 2014-09-10 15:52:18