Abgesehen von dem, was @jonhattan erwähnt hat, würde ich eine weitere Methode vorschlagen, um dies zu tun. Fügen Sie diese Abhängigkeit in die Datei mymodule.info ein. Nehmen wir an, Sie möchten eine neue Abhängigkeit zu Link, E-Mail und Adressfeld hinzufügen.
dependencies[] = link
dependencies[] = email
dependencies[] = addressfield
Versuchen Sie nun in hook_requirments, die Module automatisch zu aktivieren, falls vorhanden. Bitte beachten Sie, dass, da wir Abhängigkeiten in der Info-Datei hinzugefügt haben, diese aktiviert werden, wenn sie zum ersten Mal installiert werden. Aber sonst würden sie "verschlossen" erscheinen. In diesem Fall müssten wir sie automatisch aktivieren. Nachdem @jonhattan geantwortet hat, können Sie versuchen, dies in hook_update_N zu tun und eine Ausnahme auszulösen, wenn dies fehlschlägt.
Das Problem mit der obigen Methode ist jedoch die Benutzererfahrung. Sie können in der Ausnahmemeldung keine "Links" ausgeben. Ein weiterer Grund ist, dass dies leicht vermieden werden kann, indem der Benutzer unmittelbar vor dem Versuch einer Aktualisierung informiert wird. Für diesen Fall haben wir hook_requirements.
Ich werde ein Beispiel zur Verwendung von hook_requirements für den von mir erwähnten Beispielfall bereitstellen.
/**
* 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;
}
Jetzt ist es auch möglich, jedes Modul einzeln zu aktivieren und die Nachricht richtig zu gestalten, sodass nur die fehlenden Module in der Nachricht angezeigt werden.