题
我正在写一个 .info
模块的文件,我想包含一个已安装的脚本 /sites/all/libraries
:
所以我将下面的行包含在我的 .info
文件:
scripts[] = /sites/all/libraries/zeroclipboard-2.2.0/dist/ZeroClipboard.js
然而,无论这条路径上有或没有前导斜杠,我总是得到相同的结果:Drupal 将此视为相对于模块目录并尝试加载但失败
/sites/all/modules/custom/clipboard//sites/all/libraries/zeroclipboard-2.2.0/dist/ZeroClipboard.js?nsnrjh
所以也许我已经回答了我自己的问题,但我在 Drupal 文档中找不到任何明确的答案?
谢谢大家,
MB
解决方案
_system_rebuild_module_data
对此负责。代码中有一个完整的部分只是为了确保:
// Prefix stylesheets and scripts with module path.
$path = dirname($module->uri);
if (isset($module->info ['stylesheets'])) {
$module->info ['stylesheets'] = _system_info_add_path($module->info ['stylesheets'], $path);
}
if (isset($module->info ['scripts'])) {
$module->info ['scripts'] = _system_info_add_path($module->info ['scripts'], $path);
}
我的 猜测 如果模块本身没有安装某些东西,那么模块永远不应该假设它存在。这是引入错误的一种方式。此外,允许模块访问其目录之外可能会造成安全漏洞。
如果您需要一个无法包含在模块中的脚本,请使用 库API. 。当然还有其他方法,但大多数都是有问题的,解决所有问题几乎会导致克隆这个现成的模块。
其他提示
如果您正在创建自定义模块,那么您可以使用这些函数从库中添加库或 js 文件。
$info = libraries_load('ui.tabs');
drupal_add_library('system', 'ui.tabs');
不隶属于 drupal.stackexchange