要件が満たされていない場合、モジュールのインストールをキャンセルする方法


7

私のモジュールはPHPライブラリ(sites / all / libraries / xyz / xyz-library.php)に依存しています。drupalに、モジュールのライブラリ要件が満たされている場合にのみインストールを続行させたい。

私は私のようなものを望んでい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
  }
}

回答:


12

あなたはこれをドキュメントhook_requirementsから行うことができます

「インストール」フェーズ中に、モジュールは、たとえば、ライブラリまたはサーバーのバージョンが利用可能または十分であることを表明できます。モジュールのインストールは、Drupal自体のインストール(install.phpによる)中に、インストールプロファイルを使用して、または後で手動で実行できることに注意してください。結果として、完全なDrupal APIにアクセスせずに、インストール時の要件を確認する必要があります。これは、install.phpの間は利用できないためです。ローカリゼーションでは、たとえば、$ t = get_t()を使用して、適切なローカリゼーション関数名(t()またはst())を取得する必要があります。要件の重大度がREQUIREMENT_ERRORの場合、install.phpは中止されるか、少なくともモジュールがインストールされません。他の重大度レベルはインストールに影響を与えません。モジュールの依存関係はこれらのインストール要件に属していません。

チェック後、で配列(ドキュメントを再度参照)を返します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;
}

このコード例はこちらで確認できます


4

hook_requirements()を探しているように聞こえますが、要件が満たされない場合はインストールが中止されます。

したがって、モジュールに名前が付けられている場合、ファイル内にmymodule呼び出される関数を作成mymodule_requirements()しますmymodule.install

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.