설치 프로파일을 사용하여 기능을 설치했습니다. 그러나 항상 특정 구성 요소를 더 이상 재정의하지 않도록 (예를 들어 피처의 블록이 표시되도록) 돌아 가야합니다. 설치 프로필에서 코드 자체를 사용하여 프로그래밍 방식으로이 단계를 수행 할 수 있는지 알고 싶었습니다.
아래 스크린 샷에서 프로그래밍 방식으로 되돌려 야하는 구성 요소를 보여주었습니다 (스크린 샷에서 이미 되돌려 서 확인란을 사용할 수 없음).
설치 프로파일을 사용하여 기능을 설치했습니다. 그러나 항상 특정 구성 요소를 더 이상 재정의하지 않도록 (예를 들어 피처의 블록이 표시되도록) 돌아 가야합니다. 설치 프로필에서 코드 자체를 사용하여 프로그래밍 방식으로이 단계를 수행 할 수 있는지 알고 싶었습니다.
아래 스크린 샷에서 프로그래밍 방식으로 되돌려 야하는 구성 요소를 보여주었습니다 (스크린 샷에서 이미 되돌려 서 확인란을 사용할 수 없음).
답변:
프로그래밍 방식으로 또는 추가 기능 설치 스크립트로 기능을 재설정 할 때 몇 가지 생각을합니다.
Drush를 사용하여 기능 을 재설정 할 수 있습니다 .
drush features-revert [feature name]
또 다른 생각은 설치 과정에서 features_revert () 를 사용하는 것입니다 .
features_revert(array('module' => array('component')));
스트롱 잘하기로 모듈은 유용 할 수 강제로 당신의 기능을 내가 생각하는 기본 상태를 유지 할 수 있습니다.
OP에 대한 의견에서 @Letharion에 동의해야합니다. 설치 과정에서 다른 중요한 것들이 실수로 수정되지 않는다는 것을 알고 싶습니다.
기능의 모든 구성 요소 되돌리기
$feature = features_get_features('my_feature_machine_name');
$components = array_keys($feature->info['features']);
features_revert(array('my_feature_machine_name' => $components));
features_revert_module ()을 사용하여 단일 기능 모듈을 되돌릴 수 있습니다 .
features_revert_module('my_feature');
features_revert(array('module' => array('component')));
여기서 '모듈'은 특정 기능 모듈 (즉, 기능을 다운로드 할 때 생성 된 모듈)의 이름이고 '구성 요소'는 해당 기능의 구성 요소입니다. 따라서 피처에 정의 된 필드를 되돌리려면 컴포넌트에 'field'를 사용할 수 있습니다.
fe_block_settings_features_revert('basic_site')
fe_block_settings가 후크 인 후크 기능을 사용하여 문제를 해결할 수 있습니다. 즉, 여기서 컴포넌트이고 basic_site는 기능 / 모듈 이름입니다.
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();
}
}
}
/**
* 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)));
}
}