Programowo przywróć składnik operacji

21

Mam funkcję zainstalowaną przy użyciu profilu instalacyjnego. Ale zawsze muszę iść i przywrócić konkretny komponent, aby nie był już zastępowany (tak, aby na przykład pojawiały się bloki cechy). Chciałem tylko wiedzieć, czy mogę wykonać ten krok programowo, używając samego kodu w profilu instalacyjnym.

Na poniższym zrzucie ekranu pokazałem komponent, który należy programowo przywrócić (na zrzucie ekranu jest już cofnięty, więc pole wyboru nie jest dostępne).

Zrzut ekranu

Haker
źródło
Nie mam odpowiedzi na twoje pytanie, ale jestem gotów się założyć, że jeśli spędzisz trochę czasu w kolejce problemów, dowiesz się, dlaczego zaczyna się ono jako cofnięte. Jeśli łatka nie jest dostępna, przynajmniej będziesz bliżej zrozumienia, gdzie musisz zaatakować problem.
Letharion
@Letharion - Ale to wszystkie niestandardowe bloki i opracowane widoki.
Hacker
Zgodnie z tą definicją wszystko , co eksportujesz, byłoby „niestandardowe”, więc nie ma to dla mnie sensu.
Letharion

Odpowiedzi:

20

Oto kilka przemyśleń na temat resetowania funkcji programowo lub jako dodatkowych skryptów instalacyjnych.

Możesz użyć Drush, aby zresetować funkcję :

drush features-revert [feature name]

Innym pomysłem byłoby użycie features_revert () podczas procesu instalacji:

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

Strongarm Moduł może być przydatny także do wymusić swoją funkcję , aby zachować swój stan domyślny myślę.

Muszę się zgodzić z @Letharion w jego komentarzu do twojego OP. Chciałbym wiedzieć, że inne ważne rzeczy nie są omyłkowo modyfikowane podczas procesu instalacji.

Citricguy
źródło
16

Przywróć WSZYSTKIE komponenty w operacji

$feature = features_get_features('my_feature_machine_name');
$components = array_keys($feature->info['features']);
features_revert(array('my_feature_machine_name' => $components));
Gaydabura
źródło
4
Myślę, że features_revert_module ('my_module'); wykonuje wszystkie te kroki.
Elijah Lynn
5
features_revert(array('module' => array('component')));

Gdzie „moduł” to nazwa modułu określonych funkcji (tj. Moduł wygenerowany podczas pobierania funkcji), a „komponent” to komponenty tych funkcji. Jeśli więc chcesz tylko cofnąć pola zdefiniowane w obiekcie, możesz użyć „pola” dla komponentu.

użytkownik1496391
źródło
4

Mógłbym rozwiązać ten problem, używając funkcji fe_block_settings_features_revert('basic_site')przechwytywania, gdzie fe_block_settings jest zaczepem, tj. Tutaj komponent, a basic_site to nazwa funkcji / modułu.

Haker
źródło
3
Czy możesz wyjaśnić coś więcej? jak korzystać z tej funkcji w .profile lub .install?
kLezer,
4

Służy features_revert()do przywracania określonych składników tylko w przypadku składni:

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

na przykład:

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

Aby przywrócić cały moduł (ze wszystkimi jego komponentami), użyj features_revert_module()zamiast tego, na przykład:

features_revert_module('module_name');

Zasady

W przypadku reguł ta metoda jest znacznie szybsza (aby przywrócić pojedynczą regułę):

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

Aby przywrócić wszystkie reguły, jest to:

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

Zobacz: Dodaj zasady drush-revert [# 2474577] | Drupal.org

kenorb
źródło
2

Aby przywrócić wszystkie przesłonięte komponenty wszystkich funkcji w profilu instalacyjnym, dodaj następujące polecenie do pliku hook_profile_tasks (.) W pliku .profile:

/**
 * Rebuild & Revert all enabled features.
 */
features_rebuild();
features_revert();
rcourtna
źródło
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 Skrypnyk
źródło