프로그래밍 방식으로 피쳐 구성 요소 되돌리기


21

설치 프로파일을 사용하여 기능을 설치했습니다. 그러나 항상 특정 구성 요소를 더 이상 재정의하지 않도록 (예를 들어 피처의 블록이 표시되도록) 돌아 가야합니다. 설치 프로필에서 코드 자체를 사용하여 프로그래밍 방식으로이 단계를 수행 할 수 있는지 알고 싶었습니다.

아래 스크린 샷에서 프로그래밍 방식으로 되돌려 야하는 구성 요소를 보여주었습니다 (스크린 샷에서 이미 되돌려 서 확인란을 사용할 수 없음).

스크린 샷


귀하의 질문에 대한 답변이 없지만 문제 대기열에서 시간 을 보내면 되돌려 서 시작 하는지 알게 될 것 입니다. 사용 가능한 패치가 없으면 문제를 공격해야하는 위치를 이해하는 것이 좋습니다.
Letharion

@ 레타 리온-그러나 이들은 모두 사용자 정의 블록과 뷰가 개발되었습니다.
Hacker

그 정의에 따르면, 당신이 내보내는 모든 것은 "맞춤형 (custom)"이 될 것입니다.
Letharion

답변:


20

프로그래밍 방식으로 또는 추가 기능 설치 스크립트로 기능을 재설정 할 때 몇 가지 생각을합니다.

Drush를 사용하여 기능 을 재설정 할 수 있습니다 .

drush features-revert [feature name]

또 다른 생각은 설치 과정에서 features_revert () 를 사용하는 것입니다 .

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

스트롱 잘하기로 모듈은 유용 할 수 강제로 당신의 기능을 내가 생각하는 기본 상태를 유지 할 수 있습니다.

OP에 대한 의견에서 @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
나는 features_revert_module ( 'my_module'); 이 모든 단계를 수행합니다.
Elijah Lynn


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 September

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


2

설치 프로파일에서 모든 기능의 대체 된 모든 구성 요소를 되돌리려면 .profile 파일의 hook_profile_tasks ()에 다음을 추가하십시오.

/**
 * 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)));
      }
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.