Програмно поверніть компонент функції


21

У мене є функція, встановлена ​​за допомогою інсталяційного профілю. Але мені завжди потрібно перейти і повернути певний компонент, щоб він більше не переосмислювався (щоб, наприклад, з’являлися блоки функцій). Мені просто хотілося знати, чи можу я виконати цей крок програмно, використовуючи сам код у Інсталяційному профілі.

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

Знімок екрана


У мене немає відповіді на ваше запитання, але я готовий зробити ставку, що якщо ви витратите деякий час у черзі випусків, ви дізнаєтесь, чому воно починається як відмінено. Якщо патча немає, принаймні ви будете ближче до розуміння, де потрібно напасти на проблему.
Летаріон

@Letharion - Але все це розроблені спеціальні блоки та перегляди.
Хакер

Згідно з цим визначенням, все , що ви експортуєте, було б "на замовлення", так що для мене це не має сенсу.
Летаріон

Відповіді:


20

Ось кілька думок, хоча щодо скидання функцій програмно або як встановлення додаткових сценаріїв.

Ви можете використовувати Drush для скидання функції :

drush features-revert [feature name]

Іншою думкою було б використовувати особливості_установка () під час встановлення:

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
Я думаю, що особливості_revert_module ('мій_модуль'); робить усі ці кроки.
Ілля Лінн


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

Де «модуль» - це назва модуля конкретних функцій (тобто модуль, створений під час завантаження функції), а «компонент» - це компоненти цих функцій. Отже, якщо ви просто хочете повернути поля, визначені у функції, ви можете використовувати 'field' для компонента.


4

Я міг би вирішити цю проблему за допомогою функції гака, fe_block_settings_features_revert('basic_site')де fe_block_settings - це гачок, тобто компонент тут, а basic_site - назва функції / модуля.


3
Чи можете ви пояснити трохи більше? як ви використовуєте цю функцію в .profile або .install?
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

Щоб відновити всі переменені компоненти всіх функцій у вашому профілі інсталяції, додайте до файлу ._file_profile_tasks () файлу .profile ():

/**
 * 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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.