我正在写一个 .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');
许可以下: CC-BY-SA归因
scroll top