モジュールのインストール中に、モジュールに必要なライブラリが存在するかどうかを確認するにはどうすればよいですか?
利用した 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つです。これがお役に立てば幸いです
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;
}
カーシック
あなたは変えるべきです
hook_requirements($phase)
これに
Name_of_your_module_requirements($phase)
「library_api」はライブラリではありませんモジュールはモジュールです https://www.drupal.org/project/libraries
モジュールの依存関係を作成するには、次のようにモジュールの.infoファイルに行を追加できます。
dependencies[] = libraries
モジュール 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つ配置します。