Программно отменить компонент компонента

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

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

Снимок экрана

20 голосов | спросил Hacker 3 FebruaryEurope/MoscowbFri, 03 Feb 2012 10:56:58 +0400000000amFri, 03 Feb 2012 10:56:58 +040012 2012, 10:56:58

8 ответов


4

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

ответил Hacker 3 FebruaryEurope/MoscowbFri, 03 Feb 2012 13:07:10 +0400000000pmFri, 03 Feb 2012 13:07:10 +040012 2012, 13:07:10
20

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

Вы можете использовать Drush для сброса Feature :

drush features-revert [feature name]

Еще одна мысль заключалась бы в использовании feature_revert () во время процесс установки:

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

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

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

ответил Citricguy 3 FebruaryEurope/MoscowbFri, 03 Feb 2012 12:37:55 +0400000000pmFri, 03 Feb 2012 12:37:55 +040012 2012, 12:37:55
16

Отменить все компоненты в функции

$feature = features_get_features('my_feature_machine_name');
$components = array_keys($feature->info['features']);
features_revert(array('my_feature_machine_name' => $components));
ответил Citricguy 3 FebruaryEurope/MoscowbFri, 03 Feb 2012 12:37:55 +0400000000pmFri, 03 Feb 2012 12:37:55 +040012 2012, 12:37:55
14

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

features_revert_module('my_feature');
ответил milkovsky 18 FebruaryEurope/MoscowbWed, 18 Feb 2015 17:30:31 +0300000000pmWed, 18 Feb 2015 17:30:31 +030015 2015, 17:30:31
5
features_revert(array('module' => array('component')));

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

ответил user1496391 9 Jpm1000000pmWed, 09 Jan 2013 19:48:14 +040013 2013, 19:48:14
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();
    }
  }
}

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

ответил kenorb 24 +03002015-10-24T01:12:57+03:00312015bEurope/MoscowSat, 24 Oct 2015 01:12:57 +0300 2015, 01:12:57
2

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

/**
 * Rebuild & Revert all enabled features.
 */
features_rebuild();
features_revert();
ответил rcourtna 12 +04002012-10-12T17:50:08+04:00312012bEurope/MoscowFri, 12 Oct 2012 17:50:08 +0400 2012, 17:50:08
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)));
      }
    }
ответил Alex.Designworks 10 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 10 Sep 2014 19:52:18 +0400 2014, 19:52:18

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132