我有一个使用安装配置文件安装的功能。但是我总是必须去还原一个特定的组件,以使其不再被覆盖(例如,出现功能块)。我只是想知道是否可以使用安装配置文件中的代码本身以编程方式执行此步骤。
在下面的屏幕截图中,我显示了必须以编程方式还原的组件(在屏幕截图中,该组件已经还原,因此该复选框不可用)。
我有一个使用安装配置文件安装的功能。但是我总是必须去还原一个特定的组件,以使其不再被覆盖(例如,出现功能块)。我只是想知道是否可以使用安装配置文件中的代码本身以编程方式执行此步骤。
在下面的屏幕截图中,我显示了必须以编程方式还原的组件(在屏幕截图中,该组件已经还原,因此该复选框不可用)。
Answers:
尽管有一些关于以编程方式或作为附加安装脚本重置功能的想法。
您可以使用Drush重置功能:
drush features-revert [feature name]
另一个想法是在安装过程中使用features_revert():
features_revert(array('module' => array('component')));
在StrongARM的模块可能是有用的,以及给力的功能我认为保持其默认状态。
我必须同意@Letharion对您的OP的评论。我想知道,在安装过程中不会错误地修改其他重要内容。
您可以使用features_revert_module()恢复单个功能模块。
features_revert_module('my_feature');
使用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)));
}
}