web-dev-qa-db-ja.com

インストール中にライブラリが存在するかどうかを確認するにはどうすればよいですか?

モジュールのインストール中に、モジュールに必要なライブラリが存在するかどうかを確認するにはどうすればよいですか?

利用した hook_requirements とともに libraries_detect関数とREQUIREMENT_ERROR重大度。これにより、ライブラリが存在するかどうかに関係なく、モジュールのインストールが制限されます。

これが私のコードです:


function hook_requirements($phase) {
  $requirements = array();
  $t = get_t();
  if ($phase == 'install') {
    if (function_exists("libraries_detect") && !libraries_detect('external-lib-api')) {
      $requirements['library_api'] = array(
        'severity' => REQUIREMENT_ERROR,
        'description' => $t(
          'The required Libarary is not installed.'
        )
      );
    }
  }

  return $requirements;
}

私はこれで何か間違ったことをしていますか?それを行う他の方法はありますか?

1
Malabya Tewari

これは私のモジュールからの実用的な例の1つです。これがお役に立てば幸いです

function sfs_requirements($phase) {
  $requirements = array();
  $t = get_t();
  if ($phase == 'install' && function_exists('libraries_get_path')) {
     $plupload_path = libraries_get_path('plupload');
     $chosen_path = libraries_get_path('chosen');
     if (!$plupload_path) {
       $requirements['plupload'] = array(
         'severity' => REQUIREMENT_ERROR,
         'description' => $t('Secure File Share module requires !plupload, which is missing. Download and extract the entire contents of the archive into the %path directory on your server.',  array('!plupload' => l($t('Plupload Library'), 'https://github.com/moxiecode/plupload/archive/v1.5.8.Zip'), '%path' => 'sites/all/libraries/plupload')), 
       );
     }
     if (!$chosen_path) {
        $requirements['chosen_js'] = array(
          'severity' => REQUIREMENT_ERROR,
          'description' => $t('Secure File Share module requires !chosen, which is missing. Download and extract the entire contents of the archive into the %path directory on your server.', array('!chosen' => l($t('Chosen Library'), 'https://github.com/harvesthq/chosen/releases/download/v1.3.0/chosen_v1.3.0.Zip'), '%path' => 'sites/all/libraries/chosen')),
        );
      }
  }
  return $requirements;
}

カーシック

4
Karthik Kumar

あなたは変えるべきです

hook_requirements($phase)  

これに

 Name_of_your_module_requirements($phase)

「library_api」はライブラリではありませんモジュールはモジュールです https://www.drupal.org/project/libraries

モジュールの依存関係を作成するには、次のようにモジュールの.infoファイルに行を追加できます。

dependencies[] = libraries  
0
Riccardo Ravaro

モジュール Forena がこれをどのように処理しているか forena.moduleの429行目 を確認したい場合があります。

function forena_library_file($library) {
  $libraries = array(
      'dataTables' => 'dataTables/media/js/jquery.dataTables.min.js',
      'mpdf' => 'mpdf/mpdf.php',
      'SVGGraph' => 'SVGGraph/SVGGraph.php',
      'prince' => 'prince/prince.php'
  );
  $path = isset($libraries[$library]) && file_exists('sites/all/libraries/' . $libraries[$library]) ? 'sites/all/libraries/' . $libraries[$library] : '';
  return $path;
}

参考までに:Forenaは最大4つのライブラリとインターフェイスします。そのため、そこにそのようなエントリを4つ配置します。

0
Pierre.Vriens