So brechen Sie die Installation meines Moduls ab, wenn die Anforderungen nicht erfüllt sind

7

Mein Modul hängt von einer PHP-Bibliothek ab (sites / all / library / xyz / xyz-library.php). Ich möchte, dass Drupal die Installation nur fortsetzt, wenn die Bibliotheksanforderungen meines Moduls erfüllt sind.

Ich möchte etwas in dieser Art in meinem mymodule.install:

function mymodule_install() {
  if( library_exists() )   return; //continue with installation
  else{
    drupal_set_message(t('Installation failed. Please put xyz-library.php in sites/all/libraries/xyz folder.'), 'error');
    return FALSE; // installation failed
  }
}
Krallen
quelle

Antworten:

12

Sie können dies in hook_requirementsder Dokumentation tun :

Während der Installationsphase können Module beispielsweise bestätigen, dass Bibliotheks- oder Serverversionen verfügbar oder ausreichend sind. Beachten Sie, dass die Installation eines Moduls während der Installation von Drupal selbst (per install.php) mit einem Installationsprofil oder später von Hand erfolgen kann. Infolgedessen müssen die Anforderungen an die Installationszeit ohne Zugriff auf die vollständige Drupal-API überprüft werden, da sie während install.php nicht verfügbar ist. Für die Lokalisierung sollten Sie beispielsweise $ t = get_t () verwenden, um den entsprechenden Namen der Lokalisierungsfunktion (t () oder st ()) abzurufen. Wenn eine Anforderung den Schweregrad REQUIREMENT_ERROR hat, wird install.php abgebrochen oder zumindest das Modul nicht installiert. Andere Schweregrade haben keinen Einfluss auf die Installation. Modulabhängigkeiten gehören nicht zu diesen Installationsanforderungen.

Nach Ihrer Überprüfung geben Sie das Array (siehe Dokumente erneut) mit zurück REQUIREMENT_ERROR.

function example_requirements($phase) {
  $requirements = array();
  // Ensure translations do not break at install time
  $t = get_t();

  $requirements['example'] = array(
    'title' => $t('Example Library'),
  );

  $libraries = libraries_get_libraries();
  if (isset($libraries['example'])) {
    $requirements['example']['value'] = $t('Installed');
    $requirements['example']['severity'] = REQUIREMENT_OK;
  }
  else {
    $requirements['example']['value'] = $t('Not Installed');
    $requirements['example']['severity'] = REQUIREMENT_ERROR;
    $requirements['example']['description'] = $t('Please install the example library %url.', array('%url' => 'http://example.com'));
  }

  return $requirements;
}

Sie können dieses Codebeispiel hier überprüfen .

m1n0
quelle
4

Klingt so, als würden Sie nach hook_requirements () suchen , wodurch die Installation abgebrochen wird, wenn die Anforderungen nicht erfüllt werden.

Wenn Ihr Modul also benannt wurde mymodule, erstellen Sie eine Funktion, die mymodule_requirements()in der Datei aufgerufen wird mymodule.install.

Jerdiggity
quelle