2012-06-21 42 views
1

我已经写了依赖于settings.php配置在$ CONF被覆盖的值的模块启用/禁用模块。具体来说,它在$ CONF设置自定义会话处理程序[session_inc]防止通过.install文件

这种覆盖需要存在对模块的工作,绝对需要时,该模块被禁止/卸载不存在。

反正从.install文件中停止启用/禁用过程?我需要强制用户在这些操作之前正确配置settings.php。启用/禁用挂钩的返回值显然被忽略。

我需要防止用户锯断分支自己坐的:)

+0

另请参见:[如何处理模块冲突(“反依赖”)?](http://drupal.stackexchange.com/questions/2537/how-to-deal-with-module-conflicts-anti - 依赖) – kenorb

回答

0

您可以实现hook_requirements()需要在初始安装(install),并在状态检查(runtime)前的设置。

被禁用防止你的模块并在.install文件中似乎是不可能的。也许,相反,你可以检查你的会话处理程序,并回路由的默认处理module_exists()如果你的模块被禁止?

+0

我不认为module_exists()在引导过程中可用。在这个阶段AFAIK期间无法知道哪些模块被禁用/启用。关于我能想到的唯一解决方案是在模块页面上执行form_alter,如果事情不正确,则禁用模块的复选框。但我不能这样做'启用',因为我的模块将不会启用form_alter :) –

+0

我从来没有使用过此钩。看起来如果事情没有正确配置,这将是通知管理员的最佳方式。不幸的是,它不会帮助卸载。在我的情况下,如果某些配置在卸载后没有恢复,那么该站点会“拼接! –

1

这里是防止模块的一些例如基于从设置文件中的一些变量启用:

/** 
* Implements requirements(). 
*/ 
function hook_devel_requirements($phase) { 
    $requirements = array(); 
    // Ensure translations don't break at install time 
    $t = get_t(); 

    if ($phase == 'install') { 
    global $conf; 
    if ($conf["my_environment"] == 'live') { 
     $requirements['mymodule'] = array(
     'title' => $t('Custom Devel'), 
     'value' => $t('This module should not be enabled on Production, sorry!'), 
     'severity' => REQUIREMENT_ERROR, 
    ); 
    } 
    } 
    return $requirements; 
} 

它寻找在设置文件中定义的全局变量$conf['my_environment']。如果设置为'live',则会阻止模块启用。

记住更改hookmymodule你适当的模块名称。代码应在.install文件中使用。