Разрешены ли абсолютные пути в информационных файлах?
-
29-09-2020 - |
Вопрос
Я пишу .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?
Спасибо всем,
мегабайт
Решение
_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-файла из lirary.
$info = libraries_load('ui.tabs');
drupal_add_library('system', 'ui.tabs');