@ジョンハッタンが述べたこととは別に、それを行うためのもう1つの方法を提案します。これらの依存関係をmymodule.infoファイルに追加します。リンク、電子メール、アドレスフィールドに新しい依存関係を追加したいとします。
dependencies[] = link
dependencies[] = email
dependencies[] = addressfield
現在、hook_requirmentsでは、存在する場合、モジュールを自動的に有効にしようとします。infoファイルに依存関係を追加したので、初めてインストールしたときに依存関係が有効になることに注意してください。しかし、そうでなければ、それらは「ロックされた」ように見えます。この場合、それらを自動的に有効にする必要があります。@jonhattanが応答したので、hook_update_Nでそれを試み、失敗したときに例外をスローできます。
しかし、上記の方法の問題はユーザーエクスペリエンスです。例外メッセージに「リンク」を出力することはできません。もう1つは、更新が試行される直前にユーザーに通知することで簡単に回避できることです。そのような場合のために、hook_requirementsがあります。
私が言及した例の場合にhook_requirementsを使用する方法の例を提供します。
/**
* Implements hook_requirements.
*/
function mymodule_requirements($phase) {
$requirements = array();
if ($phase == 'update') {
$enabled = module_enable(array('link', 'email', 'addressfield'));
if( !$enabled ) {
$t = get_t();
$requirements['mymodule_migrate'] = array(
'title' => $t('Mymodule Migrate Issues'),
'value' => $t('One or more of the required modules cannot be enabled.
If you download the modules from Drupal.org those would be enabled automatically when update script is run.
So Please make sure following modules are present: !link, !email & !addressfield',
array(
'!link' => l('link', 'https://drupal.org/project/link'),
'!email' => l('email', 'https://drupal.org/project/email'),
'!addressfield' => l('addressfield', 'https://drupal.org/project/addressfield'),
)
),
'severity' => REQUIREMENT_ERROR,
);
}
}
return $requirements;
}
これで、各モジュールを個別に有効にしてメッセージを適切に作成し、存在しないモジュールのみがメッセージに表示されるようにすることもできます。