Wie gehe ich mit Modulkonflikten um („Anti-Abhängigkeiten“)?


7

Ich habe ein Modul, das speziell nicht mit einem anderen Modul funktioniert. Ich möchte wissen, ob es eine Möglichkeit gibt, zu überprüfen, ob dieses Modul aktiviert ist, und beispielsweise die Installation abzubrechen oder die Installationsbox auszublenden, damit mein Modul nur installiert werden kann, wenn dieses andere Modul deaktiviert ist.

Es ist wie inverse Abhängigkeiten!

Gibt es eine Möglichkeit, dies in Drupal richtig zu machen?

Antworten:


8

Das Modul muss nur hook_requirements () implementieren . Eine Anforderung könnte sein, dass ein Modul nicht installiert ist. Wenn das Modul einen Fehler von zurückgibt hook_requirements(), wird es nicht installiert.

Das Modul sollte Code ähnlich dem folgenden implementieren:

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

  if ($phase == 'install') {
    if (module_exists('other_module')) {
      $requirements['mymodule'] = array(
        'title' => $t('My module'), 
        'value' => $t('My module is not compatible with Other module.'), 
        'severity' => REQUIREMENT_ERROR, 
      );
    }
  }

  return $requirements;
}

5

Sie können hook_requirementsdies verwenden. Sie müssen speziell nach $phase == 'install'dem richtigen Array suchen und es dann zurückgeben REQUIREMENT_ERROR.

Das Simpletest-Modul für Drupal 6 bietet ein gutes Beispiel für den Abbruch der Installation, wenn bestimmte Bedingungen nicht erfüllt sind.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.